尝试向我正在开发的Xamarin Android应用添加启动画面时,我发现this article on Xamarin guides解释了如何制作启动画面。
添加新样式并将其添加到Activity
- 这非常有效 - 我完全使用GridView
或ListView
并使用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
仅由GridView
和ListView
引起的故障是由于我一直跟踪根活动以扩充布局,因为我使用已应用自定义样式的活动,GridView
和ListView
在充气时也会应用自定义主题。
我必须实施的解决方法是,在为Adapter
或ListView
设置GridView
时,还要发送对父Activity
的引用以扩充布局。
答案 0 :(得分:0)
简单来说,故障是由于使用自定义主题的Activity
来夸大其他视图造成的。
在我的项目中,我有一个Activity
,即应用程序的 Root 。它处理有关设备和一些其他数据的一些属性。然后,其他Activity
将管理应用程序的特定 部分 。
所以,考虑到这一点,我有这个 - 引起了小故障:
View view = convertView ??
Root.LayoutInflater.Inflate( Resource.Layout.BrandsListViewItemTemplate, null );
现在,当我使用 Root 来扩充GridView
和ListView
的布局时,主题应用于{{ 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;
}
}