6

次のハックを使用して、homeAsupIndicator をプログラムで変更しました。

int upId = Resources.getSystem().getIdentifier("up", "id", "android");
if (upId > 0) {
    ImageView up = (ImageView) findViewById(upId);
up.setImageResource(R.drawable.ic_action_bar_menu);
up.setPadding(0, 0, 20, 0);
}

ただし、これはほとんどの新しい携帯電話 (HTC One、Galaxy S3 など) では機能しません。デバイス間で一律に変更できる方法はありますか。ホーム画面でのみ変更する必要があります。他の画面にはデフォルトの画面があります。したがって、styles.xml を使用することはできません

4

12 に答える 12

18

これは私が行動を達成するためにしたことです。基本テーマを継承し、特定のアクティビティのテーマとして使用するために新しいテーマを作成しました。

<style name="CustomActivityTheme" parent="AppTheme">
    <item name="android:homeAsUpIndicator">@drawable/custom_home_as_up_icon</item>
</style>

Androidマニフェストで、アクティビティテーマを上記のように作成しました。

<activity
        android:name="com.example.CustomActivity"
        android:theme="@style/CustomActivityTheme" >
</activity>

よく働く。私が持っているすべてのデバイスをチェックすると、再び更新されます。正しい方向を指してくれてありがとう@faylon

于 2013-07-11T12:27:15.610 に答える
11

質問は動的に変更することでしたUp Home Indicatorが、この回答Themesは受け入れられ、とについてStylesです。Adnealの回答によると、これをプログラムで行う方法を見つけました。これは、手がかりと、特に正しい方法を提供してくれます。以下のスニペット コードを使用しましたが、ここに記載されている API を備えた (テスト済みの) デバイスでうまく動作します。

下位の API についてR.id.upは、上位の API では利用できないものを使用します。homeそのため、ボタンの親 ( android.R.id.home ) とその最初の子 ( android.R.id.up ) を取得する小さな回避策でこの ID を取得します。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    // get the parent view of home (app icon) imageview
    ViewGroup home = (ViewGroup) findViewById(android.R.id.home).getParent();
    // get the first child (up imageview)
    ( (ImageView) home.getChildAt(0) )
        // change the icon according to your needs
        .setImageResource(R.drawable.custom_icon_up));
} else {
    // get the up imageview directly with R.id.up
    ( (ImageView) findViewById(R.id.up) )
        .setImageResource(R.drawable.custom_icon_up));
} 

注: SDK 条件を使用しない場合は、NullPointerException.

于 2014-05-07T16:08:53.557 に答える
5

API 18 には新しいメソッドがありますActionBar.setHomeAsUpIndicator()。残念ながら、現時点ではサポート ライブラリでサポートされていません。

http://developer.android.com/reference/android/app/ActionBar.html#setHomeAsUpIndicator(android.graphics.drawable.Drawable)

編集: これらはサポート ライブラリ http://developer.android.com/reference/android/support/v7/app/ActionBar.html#setHomeAsUpIndicator(android.graphics.drawable.Drawable)でサポートされるようになりました。

于 2013-09-18T10:51:09.650 に答える
3

次のコード行を使用するだけです。

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

これにより、アイコンがアップ インジケーターに変わります。後で無効にするには、この関数を再度呼び出しfalseてパラメーターとして渡します。

于 2013-07-11T06:49:43.773 に答える
1

これを試すことができます:

this.getSupportActionBar().setHomeAsUpIndicator( R.drawable.actionbar_indicator ); //for ActionBarCompat
this.getActionBar().setHomeAsUpIndicator( R.drawable.actionbar_indicator ); //for default actionbar for post 3.0 devices

アイコンの位置を変更する必要がある場合は、次のような「レイヤー リスト」を含むドローアブル ファイルを作成する必要があります。

actionbar_indicator.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/indicator"
        android:right="5dp"
        android:left="10dp" />
</layer-list>
于 2015-03-10T15:27:18.277 に答える
-1
this.getSupportActionBar().setDisplayUseLogoEnabled(true);
this.getSupportActionBar().setLogo(R.drawable.about_selected);

また、タグの属性 android:logo でマニフェストのロゴを定義し、アクション バーのアプリ アイコンの代わりにロゴを使用するテーマに設定することもできます。

于 2013-07-11T06:42:18.247 に答える