有两个拉伸按钮Android操作栏,(Android action bar with two str

2019-06-25 21:37发布

有谁知道如何轻松实现一个操作栏有两个拉伸按钮?

下面是谷歌日历应用程序的一个例子:

谢谢!

Answer 1:

如果你更愿意这个ActionBar中无论出于何种原因,实现这一目标的一个方法是通过使用操作栏上的自定义视图。 在您自定义视图的布局则担心设置了按钮的宽度。

告诉活动使用的操作栏自定义视图:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);   
    final ActionBar ab = getActionBar();
    ab.setDisplayShowHomeEnabled(false);
    ab.setDisplayShowTitleEnabled(false);     
    final LayoutInflater inflater = (LayoutInflater)getSystemService("layout_inflater");
    View view = inflater.inflate(R.layout.action_bar_edit_mode,null); 
    ab.setCustomView(view);
    ab.setDisplayShowCustomEnabled(true);
}

然后布局/ action_bar_edit_mode.xml可以看起来像:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="fill_horizontal"
    android:orientation="horizontal" >
    <LinearLayout 
        android:layout_alignParentLeft="true"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <Button
        android:id="@+id/action_bar_button_cancel"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"           
        android:layout_weight="1"
        android:text="Cancel" />

        <Button
        android:id="@+id/action_bar_button_ok"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"           
        android:layout_weight="1"
        android:text="Ok" />
    </LinearLayout>    
</RelativeLayout>

希望它可以帮助别人!

注:我在这里实现了丑陋的嵌套布局,通常我不会推荐这一点,但由于某种原因,动作条的自己的布局拒绝让的LinearLayout占用自身的整个宽度。 通常情况下,你应该避免嵌套布局不必要这个样子! 也许,如果有人看到这一点,他们可以带我们去一个更好的解决方案?

它是什么样子:

编辑:有一个优秀的后由罗马Nurik他解释的方式来做到这一点非常漂亮。

编辑2:如果有人好奇,奠定了按钮的正确方法,让他们扩大了动作条的宽度,而无需窝的布局像我一样上面,是设置自定义视图与合理布置参数,使其组分与母体基团相匹配。

实质上:

actionBar.setCustomView(view,new ActionBar.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT));


Answer 2:

我知道2点的方式来做到这一点,但一个不留在上面。

这里是第一次:

您需要覆盖的方法onCreateOptionsMenu,但这是添加的动作条,你需要API 11要做到这一点,当你旋转这个按钮出现在动作条在屏幕上,这取决于屏幕尺寸。

 @Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
 {
     MenuItem add = menu.add(Menu.NONE, ADD_TIME, 0, R.string.add_time);
     add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

     MenuItem qkAdd = menu.add(Menu.NONE, QUICK_ADD_TIME, 1, R.string.quick_add_time);
     qkAdd.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
 }

这是结果:

如果您使用的是碎片 ,你需要setHasOptionsMenu设置为true,否则菜单不会显示。

这里是第二个:

cancel_done.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bar"
android:orientation="horizontal" >

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:dividerPadding="12dp"
    android:orientation="vertical"
    android:showDividers="end" >

    <Button
        android:id="@+id/button1"
        style="@drawable/btn_cab_done_holo_light"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@drawable/btn_cab_done_holo_light"
        android:text="CANCEL"
        android:textSize="14sp" />

</LinearLayout>

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:dividerPadding="12dp"
    android:orientation="vertical"
    android:showDividers="beginning" >

    <Button
        android:id="@+id/button2"
        style="@drawable/btn_cab_done_holo_light"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@drawable/btn_cab_done_holo_light"
        android:text="DONE"
        android:textSize="14sp" />

</LinearLayout>
</LinearLayout>

资源风格btn_cab_done_holo_light.xml你可以找到.. \ SDK \平台\机器人- %% \ DATA \水库\绘制 ,然后在你的布局,你只需要添加:

        <include
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_gravity="fill"
            layout="@layout/cancel_done" />

这是结果:

我不知道现在是否是最好的方式,但它的工作。



Answer 3:

做一个横向的LinearLayout有两个按钮。 然后设置每个它们的宽度的至match_parentandroid:layout_weight="0.5" (每个按钮然后将占用空间的50%)。

编辑:

要应用的ActionBar背景:

(ActionBarSherlock) getSupportActionBar().setCustomView(R.layout.my_view);
(ActionBar) getActionBar().setCustomView(R.layout.my_view);


Answer 4:

您可以使用动作条的actionMode实施完成并取消行动。

见http://developer.android.com/guide/topics/ui/menus.html#CAB



Answer 5:

被称为做过酒吧的机器人。 看看这将是有益的https://github.com/googlesamples/android-DoneBar



文章来源: Android action bar with two stretched buttons