0x01 前言
相信对于用过Android版QQ的,应该都不会陌生它那个向右滑动的菜单(虽说我用的是Lumia)
今天就用Xamarin.Android实现个比较简单的抽屉布局。下面直接进正题。
0x02 做个简单的抽屉布局
新建个android项目
通过NuGet安装个Xamarin.Android.Support.v4
其实呢,官网那里还用很多组件可用拿来尝试一下的。
然后修改Main.axml
1 <?xml version="1.0" encoding="utf-8"?>
2
3 android:layout_width="match_parent"
4 android:layout_height="match_parent">
5
7 android:layout_width="match_parent"
8 android:layout_height="match_parent">
9
11 android:layout_width="match_parent"
12 android:layout_height="match_parent" />
13
15 android:layout_width="200dp"
16 android:layout_height="match_parent"
17 android:layout_gravity="start"
18 android:background="@android:color/holo_blue_light"
19 android:choiceMode="singleChoice"
20 android:divider="@android:color/transparent"
21 android:dividerHeight="0dp" />
22
23
这里用了相对布局,更重要的是android.support.v4.widget.DrawerLayout
同时新建一个fragmentcontent.axml,用于呈现选中菜单的内容。
1 <?xml version="1.0" encoding="utf-8"?>
2
3 android:orientation="vertical"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent">
6
8 android:layout_height="match_parent"
9 android:gravity="center"
10 android:textAlignment="center"
11 android:textSize="30dp"
12 android:id="@+id/txtName" />
13
内容比较简单,就是显示相应菜单的文本。
然后,修改MainActivity
1 usingAndroid.App;2 usingAndroid.OS;3 usingAndroid.Support.V4.Widget;4 usingAndroid.Widget;5 namespaceDrawerLayoutDemo6 {7 [Activity(Label = "DrawerLayoutDemo", MainLauncher = true, Icon = "@drawable/icon")]8 public classMainActivity : Activity9 {10 private string[] _menu;11 protected override voidOnCreate(Bundle bundle)12 {13 base.OnCreate(bundle);14
15 SetContentView(Resource.Layout.Main);16 //the menu
17 _menu = new string[] { "C#", "Python", "Xamarin"};18 //listview
19 var listView = FindViewById(Resource.Id.left_drawer);20 //adapter
21 listView.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, _menu);22 //drawerlayout
23 var drawerLayout = FindViewById(Resource.Id.mDrawerLayout);24 //click event
25 listView.ItemClick +=ItemClick;26 }27 ///
28 ///item click event of the listview29 ///
30 ///
31 ///
32 private void ItemClick(objectsender, AdapterView.ItemClickEventArgs e)33 {34 //fragment
35 Fragment fragment = newFragmentContent(_menu[e.Position]);36 //show
37 var fm =FragmentManager.BeginTransaction().Replace(Resource.Id.content_frame, fragment).Commit();38 }39 }40 }
MainActivity的话主要是处理ListView的绑定以及点击事件。
新建一个FragmentContent
1 usingAndroid.App;2 usingAndroid.OS;3 usingAndroid.Views;4 usingAndroid.Widget;5 namespaceDrawerLayoutDemo6 {7 public classFragmentContent : Fragment8 {9 private string_text;10 public FragmentContent(stringtext)11 {12 _text =text;13 }14 public override voidOnCreate(Bundle savedInstanceState)15 {16 base.OnCreate(savedInstanceState);17 }18
19 public overrideView OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)20 {21 //get the view
22 View view = inflater.Inflate(Resource.Layout.fragmentcontent, null);23 var txt = view.FindViewById(Resource.Id.txtName);24 //set the text of the textview
25 txt.Text = "I Love" +_text;26 returnview;27 }28 }29 }
Fragment的话,就是显示把fragmentcontent.axml显示,把菜单的值显示出来。
到这里,功能是已经完成了,但是呢,是不是就能成功运行呢?
问题还是有的!!发布的时候,出现下面的问题。
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\mon.targets(348,2): error XA5208: Download failed. Please download 外链网址已屏蔽 and put it to the C:\Users\Catcher\AppData\Local\Xamarin\Android.Support.v4\23.3.0.0 directory.
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\mon.targets(348,2): error XA5208: Reason: One or more errors occurred.
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\mon.targets(348,2): error XA5207: Please install package: 'Xamarin.Android.Support.v4' available in SDK installer. Java library file C:\Users\Catcher\AppData\Local\Xamarin\Android.Support.v4\23.3.0.0\embedded\classes.jar doesn't exist.
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\mon.targets(348,2): error XA5208: Download failed. Please download 外链网址已屏蔽 and put it to the C:\Users\Catcher\AppData\Local\Xamarin\Android.Support.v4\23.3.0.0 directory.
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\mon.targets(348,2): error XA5208: Reason: One or more errors occurred.
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\mon.targets(348,2): error XA5207: Please install package: 'Xamarin.Android.Support.v4' available in SDK installer. Java library file C:\Users\Catcher\AppData\Local\Xamarin\Android.Support.v4\23.3.0.0\embedded\libs/internal_impl-23.3.0.jar doesn't exist.
下面给出解决方案。
0x03 出错处理方案
从错误我们能看出缺少东西了。
其实这个文件是可以直接下载的,不用FQ。但是在生成或是发布的时候下载会出错。
在C:\Users\Catcher\AppData\Local\Xamarin\zips下面(这个是下载之后所在的目录)
这个zip文件一直是处于无效的状态。所以只能单独下载上面的那个文件,然后把文件放在
zips那个目录下面,同时改为这个名字,即可。
然后再生成就不会出现问题了。
同时它会在C:\Users\Catcher\AppData\Local\Xamarin\Android.Support.v4\23.3.0.0目录下生成下面两个文件夹
0x04 效果图
当然,这个demo简单到不行,想弄好看点的话就自己自定义listview的样式
文字旁边个图标之类的。。然后写个好看的布局。。
最后推荐马跃大哥的博客,学Xamarin.Android可以去看看