web-dev-qa-db-ja.com

Androidのツールバーに更新や検索などのボタンを追加する方法は?

enter image description here

ToolBarを作成しましたが、menu.xmlにメニュー項目を追加すると、常にオーバーフローとして表示されます。個別に追加するにはどうすればよいですか?さらに、タイトルは中央(垂直)に表示されますが、上部に表示するにはどうすればよいですか?

menu.xml

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    tools:context="com.example.toolbar.MainActivity" >

       <item Android:id="@+id/action_search"
          Android:icon="@drawable/ic_launcher"
          Android:title="@string/action_search"
          Android:showAsAction="ifRoom"
          Android:orderInCategory="1" 
          Android:menuCategory="secondary"/>

    <item
        Android:id="@+id/action_settings"
        Android:orderInCategory="100"
        Android:title="@string/action_settings"
        app:showAsAction="never"/>

</menu>

MainActivity.Java

package com.example.toolbar;

import Android.support.v7.app.ActionBarActivity;
import Android.support.v7.widget.Toolbar;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
        setSupportActionBar(toolbar);
       // toolbar.setNavigationIcon(R.drawable.back);
        toolbar.setLogo(R.drawable.ic_launcher);
        //toolbar.setTitle("Title");
       // toolbar.setSubtitle("Subtitle");





    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

activity_main.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"

    tools:context="com.example.toolbar.MainActivity" >

     <Android.support.v7.widget.Toolbar
         xmlns:app="http://schemas.Android.com/apk/res-auto"
         Android:id="@+id/my_awesome_toolbar"
         Android:layout_width="fill_parent"
         Android:layout_height="128dp"
         Android:layout_alignParentLeft="true"
         Android:layout_alignParentTop="true"
         Android:background="?attr/colorPrimary"
         Android:minHeight="?attr/actionBarSize"
         app:theme="@style/ActionBarThemeOverlay">
     </Android.support.v7.widget.Toolbar>



</RelativeLayout>
62
kunal.c

OK、v7ライブラリを使用しているため、Android:showAsAction="ifRoom"ではなくmenu.xml app:showAsAction="ifRoom"で記述したため、アイコンが表示されました。

ただし、タイトルは拡張ツールバーの中央に表示されます。上部に表示する方法は?

79
kunal.c

これを試してください:

getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);

カスタムツールバーを作成した場合(これを行ったと思われます)、これを行うために可能な限り簡単な方法を使用できます。

toolbarTitle = (TextView)findViewById(R.id.toolbar_title);
toolbarSubTitle = (TextView)findViewById(R.id.toolbar_subtitle);
toolbarTitle.setText("Title");
toolbarSubTitle.setText("Subtitle");

ツールバーに配置する他のビューについても同様です。それが役に立てば幸い。

5
menilv

この行を上部に追加します。

"xmlns:app="http://schemas.Android.com/apk/res-auto"

次に使用します:

app:showasaction="ifroom"

3
DishantPatel

タイトルの場所を制御するには、ここで説明するように(twaddingtonによる)カスタムフォントを設定することができます。 Link

次に、テキストの位置を再配置するには、updateMeasureState()p.baselineShift += (int) (p.ascent() * R);を追加します。同様にupdateDrawState()にadd tp.baselineShift += (int) (tp.ascent() * R);を追加します。ここで、Rは-1〜1の2倍です。

0
HaimS