自定义主题样式“故障”Android应用程序

时间:2016-05-23 12:22:44

标签: android android-layout xamarin.android

尝试向我正在开发的Xamarin Android应用添加启动画面时,我发现this article on Xamarin guides解释了如何制作启动画面。

添加新样式并将其添加到Activity - 这非常有效 - 我完全使用GridViewListView并使用ImageView的所有片段搞砸了,好像图像是从屏幕的顶部拖到底部 - 并且还扩展了View高度,好像将layout_height设置为match_parent一样。

我必须指出,只有当我将Theme上的Activity设置为自定义主题样式时才会出现故障,如下所示:

[Activity(
    MainLauncher = true, NoHistory = true,
    ScreenOrientation = ScreenOrientation.Portrait,
    Theme = "@style/SplashTheme" )]

如果我将Theme更改为其他主题,或将其删除,则不会发生毛刺(也不会显示启动,我需要它)。

这可能是什么错?

资源主题样式

<style name="SplashTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:background">@drawable/SplashScreen</item>
    <item name="android:windowNoTitle">true</item>
</style>

某些片段没有正在应用的主题:

https://i.gyazo.com/ea54dc92a4b02b8acce592520434ae88.png
https://i.gyazo.com/900a729c075f510ec40886a5a3258167.png
https://i.gyazo.com/e25f069ea32fd3e5aeb8c37bba4c97a9.png

一些片段 正在应用主题:

https://i.gyazo.com/0de59e7bf285e5c45ad647c9ba8393e5.png
https://i.gyazo.com/794f55bf4297322763fbc9eede9310db.png
https://i.gyazo.com/6155baf4d8d4166f3da619aa48adfd77.png

我道歉,我必须把裸露的网址放在图片上,而不是把它们放在这里,出于某种原因,SO编辑器会抛出一个错误,说帖子包含的代码没有格式化当我试图放置图像。如果有人知道如何正确使用,可以随意使用。

在glitched版本上显示的图像是在 SplashTheme background

上定义的图像

解决方案

仅由GridViewListView引起的故障是由于我一直跟踪根活动以扩充布局,因为我使用已应用自定义样式的活动,GridViewListView在充气时也会应用自定义主题。

我必须实施的解决方法是,在为AdapterListView设置GridView时,还要发送对父Activity的引用以扩充布局。

1 个答案:

答案 0 :(得分:0)

简单来说,故障是由于使用自定义主题的Activity来夸大其他视图造成的。

在我的项目中,我有一个Activity,即应用程序的 Root 。它处理有关设备和一些其他数据的一些属性。然后,其他Activity将管理应用程序的特定 部分

所以,考虑到这一点,我有这个 - 引起了小故障

View view = convertView ??
    Root.LayoutInflater.Inflate( Resource.Layout.BrandsListViewItemTemplate, null );

现在,当我使用 Root 来扩充GridViewListView的布局时,主题应用于{{ 1}}也被应用于膨胀的Activity

要解决此问题,我只需使用 部分 而不是 Root 。虽然它没有那么大的区别,但这里是应用了修复程序的代码:

View

将其置于完整视图

活动

View view = convertView ??
    Section.LayoutInflater.Inflate( Resource.Layout.BrandsListViewItemTemplate, null );

活动 部分

[Activity(
    MainLauncher = true,
    Theme = "@style/SplashTheme" )]
public class RootActivityClass : Activity {
    protected override void OnResume() {
        StartActivity( typeof( SectionActivityClass ) );
    }
}

<强>片段

public class SectionActivityClass : Activity {
    protected override void OnCreate( Bundle savedInstancesState ) {
        FragmentTransaction fragmentTransaction = FragmentManager.BeginTransaction();
        fragmentTransaction.Replace( /* Resource Id */, new FragmentClass( this ) );
        fragmentTransaction.Commit();
    }
}

<强>适配器

public class FragmentClass : Fragment {
    SectionActivityClass Root;

    protected override void OnCreate( Bundle savedInstancesState ) {
        base.OnCreateView( inflater, container, savedInstanceState );

        View currentView = inflater.Inflate( /* Resource Layout */, null );

        GridView gridView = currentView.FindViewById<GridView>( /* GridView Id */ );
        gridView.Adapter = new GridViewAdapterClass( Root );

        return currentView;
    }

    public FragmentClass( SectionActivityClass root ) {
        Root = root;
    }
}