5

ICS の ActionBar から setActionView を使用しようとしています

それは簡単なように思えますが、どういうわけか、私が望むレイアウトの配置が得られません。下の画像でわかるように、「ターゲット」アイコンはレイアウト内で正しく中央に配置されています。しかし、私が setActionBar(progress) を設定すると、進行状況ビューは常に右に揃えられます。

メニュー項目をクリックする前に メニュー項目をクリックした後

メニュー項目をクリックする前とクリックした後の 2 つの状態を次に示します。ご覧のとおり、進行状況ビューは常に右揃えになっています。プログレス レイアウト xml の重力オプションを左から右、中央に変更しようとしましたが、何を変更しても何も変わらないようです。

この問題に関する情報が見つからなかったので、何か間違ったことをしているに違いないと考えています。

誰か手がかりを持っていますか?助けてくれてありがとう!

これが私のアクションバーメニューレイアウト「action_bar_menu.xml」です

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/locate"
          android:title="locate"
          android:icon="@drawable/locate"
          android:showAsAction="ifRoom|withText" />
</menu>

これが私のプログレスバーのレイアウト「interterminate_progress.xml」です

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="center">

    <ProgressBar android:layout_width="25dp"
                 android:layout_height="25dp"
                 android:layout_gravity="center"
                 android:indeterminate="true"
                 style="?android:attr/progressBarStyleInverse"/>
</FrameLayout>

そして最後に、これが私のtestxアクティビティです

public class HelloAndroidActivity extends Activity {

    /**
     * Called when the activity is first created.
     * @param savedInstanceState If the activity is being re-initialized after
     * previously being shut down then this Bundle contains the data it most
     * recently supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it is null.</b>
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getActionBar().setTitle("Test");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.action_bar_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);


        if (R.id.locate == item.getItemId()) {

            final MenuItem menuItem = item.setActionView(R.layout.inderterminate_progress);

            new Thread(new Runnable() {
                @Override
                public void run() {
                    SystemClock.sleep(3000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            menuItem.setActionView(null);
                        }
                    });
                }
            }).start();
        }

        return true;
    }
}
4

2 に答える 2

9

以下に示すように、スタイルを明示的に定義し、レイアウトのルートに4dipパディングを追加して膨らませると、この問題が解決するようです。

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:paddingLeft="4dip"
    android:paddingRight="4dip"
    style="?android:attr/actionButtonStyle" />

これはここのAndroidスタイルシートで使用されているようです

于 2012-07-02T11:34:05.310 に答える