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" ...

从 Activity(称为 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 设备上使用以获得类似 Holo 的外观。

似乎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 回答