• xamarin.Android 实现横向滚动导航


    经过一段时间的练习,自己也做了不少的demo和一些小项目,今天就把这些demo分享给大家,也当做笔记记录到自己的博客中。

    这次给大家带来的是HorizontalScrollView实现横向滑动,参考博客http://fangyong2006.iteye.com/blog/2035093?utm_source=tuicool。

    先让大家简单的了解一下什么是HorizontalScrollView。

    HorizontalScrollView 是一种 框架布局。HorizontalScrollView是一个 FrameLayout , 这意味着你只能在它下面放置一个子控件 ,这个子控件可以包含很多数据内容。允许视图结构比手机的屏幕大。 这个布局控件一般使用的是一个水平布局的 LinearLayout 。 文本视图 类也有其自身的滚动处理,不需要嵌入滚动视图; 但二者可以组合使用,其效果与将文本视图放入很大容器中一样. HorizontalScrollView 只支持水平方向的滚动。 HorizontalScrollView不可以和ListView同时用。

    下面我分三个步骤完成个demo,视图,适配器,主体代码。

    视图Main.axml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dip">
            <HorizontalScrollView
                android:id="@+id/category_scrollview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="6dip"
                android:scrollbars="none">
                <LinearLayout
                    android:id="@+id/category_layout"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:orientation="horizontal" />
            </HorizontalScrollView>
        </RelativeLayout>
    </LinearLayout>

    Text.axml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:minWidth="25px"
        android:minHeight="25px">
        <ImageView
            android:src="@android:drawable/ic_menu_gallery"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView1"
            android:layout_gravity="center" />
        <TextView
            android:text="Text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tvbutn"
            android:layout_gravity="center" />
    </LinearLayout>

    适配器TitleAdapter

    class TitleAdapter : BaseAdapter
        {
            private Context context;
            private List<String> titles;
            public TitleAdapter(Context context, List<String> strings)
            {
                this.context = context;
                titles = strings;
            }
    
            public override int Count
            {
                get { return titles.Count; }
            }
    
            public override Java.Lang.Object GetItem(int position)
            {
                return null;
            }
    
            public override long GetItemId(int position)
            {
                return position;
            }
    
            public override Android.Views.View GetView(int position, Android.Views.View convertView, Android.Views.ViewGroup parent)
            {
                convertView = LayoutInflater.From(context).Inflate(Resource.Layout.Text, null);
                ImageView img = convertView.FindViewById<ImageView>(Resource.Id.imageView1);
                TextView title = convertView.FindViewById<TextView>(Resource.Id.tvbutn);         
                title.Text = titles[position].ToString();
                if (title.Text == titles[0].ToString())
                {
                    title.SetTextColor(Color.Red);
                }
                return convertView;
            }
        }

    最后的MainActivity

        public class Activity1 : Activity, AdapterView.IOnItemClickListener, View.IOnClickListener 
        {
            /* 导航菜单集合 */
            private List<String> array;
            /* 导航菜单适配器 */
            private TitleAdapter titleAdapter;
            /* 列宽 */
            private int COLUMNWIDTH = 170;
            /* 导航菜单布局 */
            private GridView category;
            /* 导航菜单容器,存放导航菜单布局 */
            private LinearLayout categoryLayout;
            private HorizontalScrollView horizontalScrollView;
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);
                SetContentView(Resource.Layout.Main);
                FindViews();
                setListeners();
                initViews();
            }
    
            private void FindViews()
            {
                horizontalScrollView = FindViewById<HorizontalScrollView>(Resource.Id.category_scrollview);
                categoryLayout = FindViewById<LinearLayout>(Resource.Id.category_layout);
                // 新建一个GridView
                category = new GridView(ApplicationContext);
            }
            private void setListeners()
            {
                // 设置GridView的点击事件
                category.OnItemClickListener = this;
            }
            private void initViews()
            {
                array = new List<string>();
                array.Add("一号标题");
                array.Add("二号标题");
                array.Add("三号标题");
                array.Add("四号标题");
                // 最简单的一个适配器,里面就一个TextView
                titleAdapter = new TitleAdapter(ApplicationContext, array);
                // 设置内部子栏目的宽度
                category.SetColumnWidth(COLUMNWIDTH);
                // 设置内部子栏目个数为自动适应
                category.SetNumColumns(array.Count);
                // 设置Gravity为Center
                category.SetGravity(GravityFlags.Center);
                // 设置Selector为透明
                category.Selector = new ColorDrawable(Color.Transparent);
                int width = COLUMNWIDTH * array.Count;
                Android.Widget.LinearLayout.LayoutParams layoutParams = new Android.Widget.LinearLayout.LayoutParams(width, Android.Widget.LinearLayout.LayoutParams.WrapContent);
                // 设置GridView的LayoutParams为子栏目的宽度乘以栏目个数
                category.LayoutParameters = layoutParams;
                // 设置适配器
                category.Adapter = titleAdapter;
                // 将新建的GridView添加到布局中
                categoryLayout.AddView(category);
            }        
            public void OnClick(View v)
            {
                horizontalScrollView.Fling(550);
            }
    
            public void OnItemClick(AdapterView parent, View view, int position, long id)
            {
                TextView categoryTitle;
                // 每次都循环的将子栏目的颜色和背景还原
                for (int i = 0; i < parent.Count; i++)
                {
                    categoryTitle = (TextView)parent.GetChildAt(i);
                    categoryTitle.SetTextColor(Color.White);
                    categoryTitle.SetBackgroundDrawable(null);
                }
    
                categoryTitle = (TextView)view;
                categoryTitle.SetTextColor(Color.Red);
                //Tle.Text = categoryTitle.Text;
            }
        }

    代码大致都差不多,分享过来给大家参考,最后的效果也就和上述博客差不多。

  • 相关阅读:
    [转]IDEA 新建 JSP 项目时
    [转] AForge.NET 图像处理类
    [转] 端口被占用的处理
    [极客大挑战 2019]PHP
    今天鸽了
    [ZJCTF 2019]NiZhuanSiWei
    [极客大挑战 2019]Secret File
    [SUCTF 2019]Pythonginx
    [CISCN2019 华北赛区 Day1 Web2]ikun
    [极客大挑战 2019]EasySQL
  • 原文地址:https://www.cnblogs.com/lihuazou/p/4587605.html
Copyright © 2020-2023  润新知