【问题标题】:Modify theme of a ListFragment to be different from the activity?将 ListFragment 的主题修改为与活动不同?
【发布时间】:2011-05-25 08:32:13
【问题描述】:

基本上我想在清单中设置我的活动主题如下:

android:theme="@android:style/Theme.Translucent.NoTitleBar"

并且我希望我的活动加载一个 ListFragment 主题为 Theme.Holo.Dialog(以我自己的风格定义),但是我不能在我的片段中尽可能地调用 setStyle(....)如果它是一个 DialogFragment。

我相信我应该能够使用 ContextThemeWrapper,但我无法理解我需要拨打的电话。到目前为止,在我的 onCreateView 中我有:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    LayoutInflater newInflater = inflater.cloneInContext(new ContextThemeWrapper(getActivity(), R.style.DialogThemeSelector));
    View inflatedView = newInflater.inflate(R.layout.favourites_print, container, false);
    .....

但这不起作用。提前致谢。彼得。

*编辑 * 发帖风格:

<style name="DialogThemeSelector" parent="@android:style/Theme.Holo.Dialog"/>

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    尝试获取一个新的LayoutInflater 而不是转换提供的@,如下所示:

    Context newContext = new ContextThemeWrapper(getActivity(), R.style.DialogThemeSelector);
    LayoutInflater newInflater = (LayoutInflater) newContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    View inflatedView = newInflater.inflate(R.layout.favourites_print, container, false);
    

    如果这不起作用,我怀疑您的style 中可能缺少某些内容。

    【讨论】:

    • 谢谢,很遗憾没用。我的活动是半透明的(如预期的那样),但我的布局内容 (favourites_print) 只是覆盖在底层可见应用程序的顶部并拉伸以填充设备的宽度,因此不采用对话框样式。
    【解决方案2】:

    我只是以幼稚的方式来做:我使用 style 属性在 XML 中定义我的列表项布局,它似乎可以工作。我的列表项不太关心它们是否在片段中。我没有尝试对片段本身进行样式设置,但由于列表项是其中唯一的内容,因此对它们进行样式设置似乎就足够了。

    【讨论】:

    • 谢谢,虽然我确实希望 ListFragment '对话框' 采用全息主题,而不仅仅是列表项条目。
    【解决方案3】:

    尝试使用 requestWindowFeature(Window.FEATURE_NO_TITLE);而不是 android: theme="@android:style/Theme.Translucent.NoTitleBar"

    并放入 manifest targetSdkVersion="14" 以供使用 Theme.Holo。

    【讨论】:

    • 虽然我确实需要活动是半透明的
    【解决方案4】:

    也许我理解错了,但你不能只在清单中为包含列表片段的活动设置主题吗?

    编辑:在调查之后,我最好的建议是查看 dialogfragment 的来源并尝试在您自己的 customfragment 中复制该行为。

    或

    在新的 FragmentActivity 中启动您的 Fragment =/

    【讨论】:

    • 我特别需要该活动具有Theme.Translucent.NoTitleBar 主题,并且无法将其主题设置为对话框之一。如果我的活动加载了DialogFragment,那么我可以调用setStyle 将其主题设置为Holo.Dialog,但如前所述,ListFragment 没有可用的setStyle 方法。
    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多