Android ActionBar setActionView布局问题

Android ActionBar setActionView布局问题,android,android-4.0-ice-cream-sandwich,Android,Android 4.0 Ice Cream Sandwich,我一直在尝试使用ICS中ActionBar中的setActionView 看起来应该是直截了当的,但不知何故,我没有得到我所希望的布局对齐。如下图所示,“目标”图标在其布局中正确居中。但当我设置ActionBar(进度)时,无论我尝试什么,进度视图总是与右侧对齐 以下是单击菜单项前后的两种状态。如您所见,进度视图始终向右对齐。我尝试过将MyProgressLayoutXML中的重力选项从左到右更改为中心,无论我做了什么更改,它似乎都没有改变任何东西 我没有找到任何关于这个问题的信息,所以我想

我一直在尝试使用ICS中ActionBar中的setActionView

看起来应该是直截了当的,但不知何故,我没有得到我所希望的布局对齐。如下图所示,“目标”图标在其布局中正确居中。但当我设置ActionBar(进度)时,无论我尝试什么,进度视图总是与右侧对齐

以下是单击菜单项前后的两种状态。如您所见,进度视图始终向右对齐。我尝试过将MyProgressLayoutXML中的重力选项从左到右更改为中心,无论我做了什么更改,它似乎都没有改变任何东西

我没有找到任何关于这个问题的信息,所以我想我一定是做错了什么

有人有线索吗? 谢谢你的帮助

这是我的操作栏菜单布局“action\u bar\u 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>

这是我的progressbar布局“inderterminate\u 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;
    }
}
公共类HelloAndroidActivity扩展活动{
/**
*在首次创建活动时调用。
*@param savedInstanceState,如果活动在
*以前关闭时,此捆绑包包含它最需要的数据
*最近在onSaveInstanceState(Bundle)中提供。注意:否则为空。
*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getActionBar().setTitle(“测试”);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单、动作栏、菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
super.onOptionsItemSelected(项目);
if(R.id.locate==item.getItemId()){
final MenuItem MenuItem=item.setActionView(R.layout.inderterminate\u progress);
新线程(newrunnable()){
@凌驾
公开募捐{
系统时钟。睡眠(3000);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
menuItem.setActionView(空);
}
});
}
}).start();
}
返回true;
}
}

似乎明确定义样式并在布局的根部添加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样式表中使用得有点晚,但正确的解决方案不是像4dp这样的绝对值。正确的方法是将minWidth设置为ABS值:

android:minWidth="@dimen/abs__action_button_min_width"
进度条示例:

<?xml version="1.0" encoding="utf-8"?>

<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
             android:minWidth="@dimen/abs__action_button_min_width"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:focusable="true"
             android:layout_gravity="center"
             style="@android:style/Widget.ProgressBar.Small"/>

是的,你完全正确:)。谢谢你的帮助,非常感谢。