반투명 Action Bar 화면

12183 단어 AndroidJava
화면 아래!
Action Bar 뜨고 싶어요!!
배경의 이미지를 더 투과하고 싶어요!!!

개시하다


그래서 희미한 욕망이지만 그것도 방법이다.

최종 목표


이런 느낌을 원해요.

Action Bar를 투명하게 만드는 이론


style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyHoloLight" parent="android:Theme.Holo.Light">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

Simple is Best!

Action Bar를 화면 아래로 가져가는 이론(?)


via http://visible-true.blogspot.jp/2012/02/android.html
Utils.java

public class Utils {
    private static final String TAG = Utils.class.getSimpleName();

    /**
     * ActionBarを画面下部に表示する
     * 
     * @param activity
     */
    public final static void actionBarUpsideDown(Activity activity) {
        View root = activity.getWindow().getDecorView();
        View firstChild = ((ViewGroup) root).getChildAt(0);
        if (firstChild instanceof ViewGroup) {
            ViewGroup viewGroup = (ViewGroup) firstChild;
            List<View> views = findViewsWithClassName(root,
                    "com.android.internal.widget.ActionBarContainer");
            if (!views.isEmpty()) {
                for (View vv : views) {
                    viewGroup.removeView(vv);
                }
                for (View vv : views) {
                    viewGroup.addView(vv);
                }
            }
        } else {
            Log.e(TAG, "first child is not ViewGroup.");
        }
    }

    private static List<View> findViewsWithClassName(View v, String className) {
        List<View> views = new ArrayList<View>();
        findViewsWithClass(v, className, views);
        return views;
    }

    @SuppressWarnings("unchecked")
    private static <T extends View> void findViewsWithClass(View v, String clazz, List<T> views) {
        if (v.getClass().getName().equals(clazz)) {
            views.add((T) v);
        }
        if (v instanceof ViewGroup) {
            ViewGroup g = (ViewGroup) v;
            for (int i = 0; i < g.getChildCount(); i++) {
                findViewsWithClass(g.getChildAt(i), clazz, views);
            }
        }
    }

    private Utils() {
        // ignore
    }
}

순조롭지 않다!!


위의 두 개를 조합하면 Utils #action Bar Upside Down () 으로 Action Bar를 떼어낼 수 없습니다.
window Action BarOverlay의 지정에 따라 View 구조에 변화가 있습니까?

그럼 간단하게 Action Bar 배경에서 α를 설정하도록 하겠습니다.


style.xml

    <style name="Theme.MainActivity.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
        <item name="android:background">#88ffffff</item>
    </style>

main_activity.xml

    <RelativeLayout
        android:id="@+id/rootLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_1920x1080" />

결실


(3·) 있지~?

지정된 배경 이미지의 일부가 다릅니다.


위에는 메인이에요.activity.xml의 루트 요소에 배경 그림을 설정합니다.
그러나 Action Bar가 표시되면 이 노선 레이아웃의 높이는 Action Bar의 높이에서 뺀 값입니다.
따라서 실제 Action Bar는 위에서 지정한 대로 반투명하지만 mainactivity.xml에서 지정한 배경 그림이 Action Bar 아래에 그려지지 않았기 때문에 Action Bar의 배경은 흰색으로 유지됩니다.

Activity로 배경 이미지 다시 설정하기


MainActivity.java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity.xml);
    getWindow().getDecorView().setBackgroundResource(R.drawable.bg_1920x1080);

그런 다음 위의 최종 목표처럼 Action Bar를 표시할 수 있습니다.

좋은 웹페이지 즐겨찾기