web-dev-qa-db-ja.com

サポートアクションバーを使用してホームを有効にする

V7-appcompatライブラリで提供される新しいSupportActionBarを使用するようにコードを変更しましたが、Jellybean電話でコードを実行すると(おそらくHoneycombとIce creamサンドイッチにも同じ問題が存在します)、ホームボタンが表示されないようです。有効化されます。

GetSupportActionBar()。setHomeButtonEnabled(true);を呼び出します。それが言うことをしていないようですが、ジンジャーブレッドの電話で動作します。

GetActionBar()。setHomeButtonEnabled(true)に置き換えると、機能します。

V11 +で使用するテーマは次のとおりです。

<style name="MyTheme" parent="@style/Theme.AppCompat">
    <item name="Android:windowActionBar">true</item>
    <item name="Android:windowNoTitle">false</item>
    <item name="Android:listViewStyle">@style/MyListView</item>
    <item name="Android:actionBarStyle">@style/MyActionBarStyle</item>
    <item name="Android:windowSoftInputMode">stateAlwaysHidden</item>
    <item name="Android:buttonStyle">@style/MyButton</item>
    <item name="Android:radioButtonStyle">@style/MyRadioButtonStyle</item>
    <item name="Android:windowContentOverlay">@drawable/ab_solid_dove_grey</item>
    <item name="Android:windowTitleSize">@dimen/action_bar_height</item>
    <item name="Android:selectableItemBackground">@drawable/sel_standard_item</item>
    <item name="Android:windowBackground">@drawable/default_bg</item>
    <item name="Android:actionMenuTextAppearance">@style/MyActionBarText</item>
    <item name="Android:actionMenuTextColor">@color/gallery</item>
    <item name="Android:tabWidgetStyle">@style/MyTabWidget</item>
</style>

そして、アクションバースタイルv11 +が定義されています。

<style name="MyActionBarStyle" parent="Android:style/Widget.Holo.ActionBar">
    <item name="Android:displayOptions">useLogo|showHome|showCustom</item>
    <item name="displayOptions">useLogo|showHome|showCustom</item>
    <item name="Android:actionBarSize">@dimen/action_bar_height</item>
    <item name="Android:icon">@drawable/ic_launcher</item>
    <item name="Android:background">@Android:color/transparent</item> <!-- Remove blue line from bottom of action bar -->
</style>

アクションバーを正しくサポートするAndroidバージョンで、ホームボタンが有効にならない理由は誰でも知っています。

===更新=== appcompatライブラリのソースコードを見たところ、ActionBarImplBaseで次のように見えますが間違っていることに気づきました。

 setHomeButtonEnabled(abp.enableHomeButtonByDefault() || homeAsUp);

これは、ホームボタンが有効になるのは、AndroidバージョンがICS未満の場合、またはアップインジケーターを有効にした場合のみですか?-私はしませんしたくない。

8
Barry Irvine

これら3つすべてを使用してみましたか(getSupportActionbar()と交換してみてください)?

 getActionBar().setDisplayShowHomeEnabled(true);
 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true); 

ボタンを手動で操作してみましたか?

@Override
public boolean onOptionsItemSelected(int featureId, MenuItem item) {
     int itemId = item.getItemId();
     if(itemId == Android.R.id.home){
         // Do stuff
     }
     return true;
}
14
Kc Gibson

これは私のために働いた:

_@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_your_activity);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // ... other stuff
}

@Override
public boolean onSupportNavigateUp(){
    finish();
    // or call onBackPressed()
    return true;
}
_

SupportActionBarの戻るボタンを使用すると、メソッドonSupportNavigateUp()が呼び出されます。

13
Jason Saruulo

今これを試してみてください。原因シャーロックにあったのに、こういう自分の問題は解決できた。上記のスタイルから、テーマをカスタマイズしたことがわかります。私の場合、Sherlockテーマをカスタマイズしましたが、これがAndroid 4.0以降で問題が発生した原因でした。テーマが失敗しました。そこで、Android 4.0以降で実行されているときにデフォルトのSherlockテーマを使用するようにAndroidに指示するコードを追加しました。だから私はこれがあなたのために働くと思います。 Androidに、機能していないバージョンのAndroidでv7-appcompatライブラリのデフォルトテーマを使用するように指示します。

コードは以下のとおりです。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
            this.setTheme(R.style.Theme_Sherlock);
        } else {
            this.setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);

        }

あなたの場合、テーマをv7-appcompatライブラリに編集します。

それがあなたのために働くならば、答えとしてマークしてください。これを使っていれば、場所のコードからテーマをカスタマイズできるかもしれないと思います。

1
user2754532

Android Gingerbread cos Androidアクションバーなどのデバイスは3.0以降でのみサポートされているため、Sherlockロックライブラリは下位互換性を提供します。

http://actionbarsherlock.com/ ---ここからライブラリをダウンロードします。

次に、この行をコードに追加します。

ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
         actionBar.setIcon(Android.R.color.transparent);

        actionBar.setDisplayUseLogoEnabled(false);

これは、アクションバーにバックホームキーを追加するのに役立ちます。また、アイコンを表示したくない場合は、アイコンが非表示になります。ただし、すべてのアクティビティでアプリアイコンを表示したい場合は、以下のこの行にコメントしてください。

actionBar.setIcon(Android.R.color.transparent);

1
user2754532

APIレベル7以上で実行している場合は、アクティビティの ActionBarActivity クラスを拡張し、アクティビティテーマをTheme.AppCompatまたは同様のテーマに設定することで、アクションバーをアクティビティに追加できます。

0
VikramV