2014-04-08 91 views
-1

我需要仅使用主题/样式选项运行自定义对话框布局。通过代码运行自定义对话框布局不适合我。我想这应该是可以通过属性"android:layout", "android:dialogLayout", "*android:dialogCustomTitleDecorLayout", "*android:dialogTitleIconsDecorLayout", "*android:dialogTitleDecorLayout".<br/><br/> 我活动的onCreate负载布局的对话风格的平均值:使用主题/样式运行自定义对话框布局

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setTheme(R.style.MyDialog); 
    setContentView(R.layout.mydialog); 
    this.setTitle("A title"); 
} 

风格的xml:

<style name="MyDialog" parent="android:Theme.Holo.Light.Dialog"> 
    <item name="android:windowTitleStyle">@style/MyDialog.WindowTitle</item> 
    <item name="android:layout">@layout/dialog_title</item> 
    <item name="android:dialogLayout">@layout/dialog_title</item> 
    <item name="*android:dialogCustomTitleDecorLayout">@layout/dialog_title</item> 
    <item name="*android:dialogTitleIconsDecorLayout">@layout/dialog_title</item> 
    <item name="*android:dialogTitleDecorLayout">@layout/dialog_title</item> 
</style> 

<style name="MyDialog.WindowTitle"> 
    <item name="android:maxLines">1</item> 
    <item name="android:scrollHorizontally">true</item> 
    <item name="android:textAppearance">@style/TextAppearance_WindowTitle</item> 
</style> 


<style name="TextAppearance_WindowTitle"> 
    <item name="android:textSize">32sp</item> 
    <item name="android:textColor">@+color/verdeTI</item> 
</style> 

请注意,文本颜色的标题是正确的应用(@ +颜色/ verdeTI),所以我相信级联样式是正确的,但似乎没有布局选项可用,因为我继续看到标准的对话框布局。我的“dialog_title”使用完全不同的ImageView作为分隔符,所以我可以确定它何时加载。 自定义分隔线只是主要原因,因为我需要不同的布局。

更新15/4/2014

Android theme Guide stats:

一些样式属性,然而,不被任何View元素的支持,只能被应用为主题。这些样式属性适用于整个窗口而不适用于任何类型的视图。例如,主题的样式属性可以隐藏应用程序标题,隐藏状态栏或更改窗口的背景。这些样式属性不属于任何View对象。要发现这些仅限主题的样式属性,请查看以窗口开头的属性的R.attr引用。例如,windowNoTitle和windowBackground是仅当样式作为活动或应用程序的主题应用时才有效的样式属性。有关将样式应用为主题的信息,请参阅下一节。

确定以“窗口”开头的属性仅适用于不在样式中的主题。什么是布局属性?当他们被应用?

+0

我很好奇,这些“明星”前缀是什么意思,你为什么使用它?在'* android:dialogCustomTitleDecorLayout'中 - 这个'*'符号在android样式框架中有什么意义? – Drew

+1

某处我看到这是引用不能直接访问的私人android属性的方式(没有*) – alrama

+0

真的,这是。有用。 – Drew

回答

0

您可以通过只在此代码清单添加到您的活动

android:theme="@android:style/Theme.     Dialog" 

创建所需的布局文件,并打开它与活动类的尝试,但你可以以这样越来越标题栏的对话框中这是您的活动的标签名称。要删除它的setContentView

之前添加此代码
requestWindowFeature(Window. FEATURE_NO_TITLE); 
+0

在清单活动中设置主题是可以的,但在代码中我的setTheme()的效果相同,而我需要在每个对话框中(定制)标题栏在应用程序中打开。我的问题更简单:覆盖默认的对话框布局是可能的风格或不是?如果不是使用“android:* Layout”样式属性? – alrama

+0

如果您想要一个不同的标题栏并创建一个基本样式为theme.dialog的新样式并在其中执行所需的修改。我相信你会得到你想要的 – Maverick

+0

不完全正确。我需要在标题文本下的自定义分隔符。它不是可调整的,因此问题 – alrama

0

你可以通过ThemeNameconstructor像这样argument尝试。

public class TestDialog extends Dialog{ 

    public TestDialog(Context context) { 
     super(context, R.style.YourTheme); 
     // TODO Auto-generated constructor stub 
    } 
} 

如果您需要,添加窗口功能。

在任何Activity中设置此类的对象,以便您可以使用Dialog属性。

: - 更多信息https://stackoverflow.com/a/18224754/942224

我使用这种方式。所以它可能会帮助你。

+0

赏金几乎关闭,所以我给你我的荣誉,接受你的重播为“最佳”解决方案。其实我宁愿有一个使用主题设置的全局解决方案来定制所有AlertDialog,ProgressDialog,ecc。 。使用您的解决方案,我仍然需要管理我的活动作为对话框运行(设置主题,如在我的示例中) – alrama

+0

一旦按照主题创建AlertDialog和ProgressDialog类。比你在任何活动中都可以使用的还要多,你也可以在任何项目中使用。创建对象并使用对话框属性。 –