我一直在尝试使用ICS中ActionBar的setActionView
似乎它应该是直截了当但不知何故我没有得到我希望的布局对齐。如下图所示,“目标”图标在其布局中正确居中。但是当我setActionBar(progress)时,无论我尝试什么,进度视图总是与右边对齐。
以下是单击菜单项之前和之后的两种状态。如您所见,进度视图始终与右侧对齐。我已经尝试将我的进度布局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>
这是我的进度条布局'inderterminate_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;
}
}
答案 0 :(得分: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 stylesheet here
中使用答案 1 :(得分:3)
稍晚但正确的解决方案不是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"/>