Android:如何以编程方式将Activity的主题设置为Theme.Dialog。
Android:如何以编程方式将Activity的主题设置为Theme.Dialog。
我有一个Activity(称为TestActivity),它需要在某些地方作为普通的无主题Activity,同时在其他地方作为Theme.Dialog。我试图重复使用同一个TestActivity来完成这两个任务。
我想要的只是动态设置主题。
代码很简单:
public void onCreate(Bundle icicle) { if (Utility.isDialog == true) setTheme(android.R.style.Theme_Dialog); super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); .....
同时在清单文件中添加如下:
与此同时,我发现有一篇文章说这不能被完成,这是文章的链接。但我坚信这是可以实现的。
欢迎提供任何建议。
admin 更改状态以发布 2023年5月25日
想提供解决这个问题的方法。
问题:如何将相同的活动用作对话框和全屏基础。
解决方案:
- 在AndroidManifest.xml中使用主题
@android:style/Theme.Dialog
定义您的活动。 - 在相应的
.Java
文件中,检查定义对话框
模式的intent
额外的参数。 - 如果不存在,将
Theme
设置为android.R.style.Theme
。这是如果您没有定义任何主题应用的默认theme
。
代码:
boolean fDialogMode = getIntent().hasExtra("dialog_mode"); if( ! fDialogMode ) { super.setTheme(android.R.style.Theme); }
备选方案:
更复杂的解决方案是使用以下AlertDialog
:
- 定义一个从
ArrayAdapter
扩展的ListAdapter
类。 -
在
getCount
函数中返回1
。@Override public int getCount() { return 1; }
-
在
getView
函数中,inflate
您需要的activity
的layout
,并在返回view
之前进行任何自定义。@Override public View getView( int position, View view, ViewGroup group ) { View v = view; if( v == null ) { v = getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate(
, null ); } ... Do any customization here .... return v; }
这绝对是一个次选选项,但是如果您在activity
的类中没有太多处理,这可能是一个选项。
考虑使用这种解决方案的唯一原因是将其显示为对话框
的逻辑隔离到它用作对话框
的地方。
这两个选项都对我起作用,但出于显而易见的原因,我选择第一个选项。 🙂