3

私は現在、最初のアプリケーションの1つを作成しています。ActionBarSherlockを使用しています。ロゴをアクションバー(スクロールビュー)に重ねたいのですが。

現在、main_activity.xmlがあります。MainActivity.javaでは、setContentViewを使用してmain_activity.xmlを表示します。その後、ActionBarSherlockにgetSupportActionBar()を使用します。私はRelativeLayout(http://www.mkyong.com/android/android-relativelayout-example/)を使用して試してみました。複数のレイアウトがあるため、これは実際には機能しませんでした。

だから私は左右にいくつかのことを試しましたが、それは常にアクションバーの前または後ろに終わるか、コンテンツに到達する直前に停止します。それは2つの異なるレイアウトのためです、それは私が知っていることです。しかし、どうすればこれを解決できますか?出来ますか?前もって感謝します!

私が欲しいもの:http: //f.cl.ly/items/3N0w243N1t2Q3i1H1f1k/Untitled-1.png

4

2 に答える 2

4

次のいずれかを実行できます。

A.画像を2つに分割します。
上部をActionBarロゴとして使用し、下部をコンテンツの上に表示します。

B.単一の画像を使用する
ロゴだけを含むレイアウトファイルが必要になります(正しいマージンを簡単に設定できるように、おそらくImageView内側のようなものが必要になります)。LinearLayout次にsetContentView、アクティビティを呼び出した後、次のコマンドでロゴビューを追加します。

ViewGroup decorViewGroup = (ViewGroup) getWindow().getDecorView();
decorViewGroup.addView(logoView);

レイアウトファイルの使用

レイアウトファイルの例(logo_view.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/logo_image"
        android:scaleType="center"
        android:layout_marginLeft="10dip"
        />

</LinearLayout>

レイアウトファイルを膨らませます。

LayoutInflater inflater = LayoutInflater.from(this);
View logoView = inflater.inflate(R.layout.logo_view, null, false);
于 2013-01-02T23:54:45.367 に答える
1

元の回答は一部のデバイスで機能しますが、他のデバイスでは画像がステータスバーの下に表示されます。これを解決するには、次のように、上部のActionBarの位置を取得し、それをロゴ画像の上部の位置と比較してから、上部のパディングを追加します。

    // Inflate logo layout
    LayoutInflater inflater = LayoutInflater.from(this);
    final View logoView = inflater.inflate(R.layout.menu_logo, null);

    // Add logo to view
    ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
    viewGroup.addView(logoView);

    // Adjust the logo position
    int resId = getResources().getIdentifier("action_bar_container", "id", "android");
    final View actionBarView = viewGroup.findViewById(resId);
    if (actionBarView != null) {
        actionBarView.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    public void onGlobalLayout() {
                        // Remove the listener
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                            actionBarView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                        } else {
                            actionBarView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                        }

                        // Measure views
                        int[] location = new int[2];
                        actionBarView.getLocationOnScreen(location);

                        int[] logoLocation = new int[2];
                        logoView.getLocationOnScreen(logoLocation);

                        // Add top padding if necessary
                        if (location[1] > logoLocation[1]) {
                            logoView.setPadding(0, location[1] - logoLocation[1], 0, 0);
                        }
                    }
                }
        );
    }

これは、Androidバージョン4.0から4.4.4までのAndroidバージョン4.0とAndroid Lプレビューを実行するさまざまなデバイス(電話、大小のタブレット-Kindle Fire HDXを含む)で機能しました。

于 2014-07-02T10:26:15.987 に答える