23

2つのボタンを伸ばしたアクションバーを簡単に実装する方法を知っている人はいますか?

Googleカレンダーアプリの例を次に示します。

ここに画像の説明を入力してください

ありがとうございました!

4

5 に答える 5

39

何らかの理由でこれをアクションバーに含める場合、これを実現する1つの方法は、アクションバーのカスタムビューを使用することです。カスタムビューのレイアウト内で、ボタンの幅の設定について心配します。

アクションバーにカスタムビューを使用するようにアクティビティに指示します。

@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);
}

layout / 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がそれ自体で幅全体を占めるようにすることを拒否します。通常、このように不必要にレイアウトをネストすることは避けてください。おそらく誰かがこれを見た場合、彼らは私たちにもっと良い解決策を指摘することができますか?

それはどのようなものか: 結果

編集: Roman Nurikによる素晴らしい投稿があり、彼はこれを非常にうまく行う方法を説明しています。

編集2:誰かが興味を持っている場合、上記のようにレイアウトをネストする必要なしにアクションバーの幅を拡大するようにボタンをレイアウトする正しい方法は、次のことを可能にする適切なレイアウトパラメータでカスタムビューを設定することです親グループに一致するそのコンポーネント。

基本的に:

actionBar.setCustomView(view,new ActionBar.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT));
于 2012-11-08T03:14:52.500 に答える
5

私はこれを行う2つの方法を知っていますが、1つはトップに留まりません。

これが1番目です:

メソッドonCreateOptionsMenuをオーバーライドする必要がありますが、これはActionBarに追加されます。これを行うには、API 11が必要です。画面を回転すると、このボタンがActionBarに表示されます。これは、画面サイズによって異なります。

 @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);
 }

そしてこれは結果です:

ここに画像の説明を入力してください

フラグメントを使用している場合は、 setHasOptionsMenutrueに設定する必要があります。そうしないと、メニューが表示されません。

これが2番目です:

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 \ platform \ android-%% \ data \ res \ drawableにあり、レイアウトに追加するだけです。

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

そしてこれは結果です:

ここに画像の説明を入力してください

最善の方法かどうかはわかりませんが、機能しています。

于 2012-12-31T04:20:07.457 に答える
3

2つのボタンで水平LinearLayoutを作成します。次に、それぞれの幅をmatch_parentとに設定しandroid:layout_weight="0.5" ます(各ボタンはスペースの50%を占めます)。

編集:

ActionBar背景として適用するには:

(ActionBarSherlock) getSupportActionBar().setCustomView(R.layout.my_view);
(ActionBar) getActionBar().setCustomView(R.layout.my_view);
于 2012-06-29T17:25:43.457 に答える
0

ActionBarのactionModeを使用して、DoneアクションとCancelアクションを実装できます。

http://developer.android.com/guide/topics/ui/menus.html#CABを参照してください

于 2013-01-19T21:42:02.397 に答える
0

アンドロイドでは完了バーと呼ばれます。これを見てくださいそれは役に立ちますlhttps ://github.com/googlesamples/android-DoneBar

于 2016-04-27T04:06:32.993 に答える