0

さて、私はいくつかのバグに遭遇したと思います。

LayerListsのビットマップにバグがあるようです:http://www.michaelpardo.com/2011/10/repeating-bitmaps-inside-layerlists/

カスタムタイトルバーで背景描画可能として使用したいレイヤーリストがあります。

<style name="custom_titlebar_background">
<item name="android:background">@drawable/custom_titlebar_background</item>
</style>

編集: リンクされた回避策を使用するには、プログラムでタイトルバーの背景を設定する必要がありますが、その方法がわかりません。これは機能していないようです。画面全体(実際のコンテンツビューを含む)の背景が変更されます。

LayerDrawable layer = (LayerDrawable)getResources().getDrawable(R.drawable.custom_titlebar_background);
        setLayerDrawableBitmapsRepeating(layer);
        getWindow().setBackgroundDrawable(layer);

setBackgroundDrawable()を呼び出すためのカスタムタイトルバーへの参照を取得する方法、またはカスタムタイトルバーの背景を設定する他の方法はありますか?

4

2 に答える 2

1

次のようにカスタムタイトルバーを作成します。

res/layout/mytitle.xml-これはタイトルバーを表すビューです

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTitle"
  android:text="This is my new title"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
/>

res/values/themes.xml-

デフォルトのテーマを継承するテーマを作成し、背景スタイルを独自のスタイルに設定します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="android:Theme"> 
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

res/values/styles.xml-ここで、タイトルの背景に必要な背景を使用するようにテーマを設定します

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="android:background">@drawable/custom_titlebar_background</item>                   
    </style>
</resources>

AndroidMANIFEST.xml、アプリケーション(アプリケーション全体)またはアクティビティ(このアクティビティのみ)タグのいずれかでテーマ属性を設定します

<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...

アクティビティ(CustomTitleBarと呼ばれる)から:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);

}
于 2013-01-23T21:25:03.647 に答える
0

私は解決策を見つけました。それは完全に汚れており、文書化されていないメンバーを利用しています。私のカスタムタイトルバーは2.xデバイスでのみ使用され、ホロのような外観を実現しているため、これは少なくとも私にとっては機能します。

Androidのタイトルビューは常に同じIDを持っているようです。

// http://stackoverflow.com/questions/820398/android-change-custom-title-view-at-run-time
        LayerDrawable layer = (LayerDrawable)getResources().getDrawable(R.drawable.custom_titlebar_background);
        setLayerDrawableBitmapsRepeating(layer);

        // get title view and set new background view
        try
        {
            // retrieve value for com.android.internal.R.id.title_container(=0x1020149)
            int titleContainerId = (Integer) Class.forName("com.android.internal.R$id").getField("title_container").get(null);
            View titleView = findViewById(titleContainerId);

            if(titleView != null)
            {
                titleView.setBackgroundDrawable(layer);
            }
        }
        catch(Exception e)
        {
            // nothing, just skip
        }

重要なことをしていなくてもアプリケーションが機能する限り、この回避策を使用して古いAndroidビルドのタイル化可能なビットマップを修正しない理由はありません。

于 2013-01-23T22:56:02.823 に答える