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[].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 = ;
- /* 导航菜单布局 */
- 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();
- }
- public void OnItemClick(AdapterView parent, View view, int position, long id)
- {
- TextView categoryTitle;
- // 每次都循环的将子栏目的颜色和背景还原
- for (int i = ; 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;
- }
- }
代码大致都差不多,分享过来给大家参考,最后的效果也就和上述博客差不多。
xamarin.Android 实现横向滚动导航的更多相关文章
- [置顶]
xamarin android Fragment实现底部导航栏
前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...
- Android TextView 横向滚动(跑马灯效果)
Android TextView 中当文字比較多时希望它横向滚动显示,以下是一种亲測可行的方法. 效果图: 1.自己定义TextView,重写isFocused()方法返回true,让自己定义Text ...
- Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
本博主在一次个人移动端项目中,遇到这么一个需求:希望自己的项目中,头部导航条的效果可以像今日头条那样,横向滚动! 对于这样的效果,在各大移动端项目中几乎是随处可见,为什么呢? 我们都知道,对于移动端也 ...
- 仿今日头条横向滚动导航栏--原生js
咳咳!先打一波小广告,在上一篇里忘记了,那啥……我的那个个人博客做好了-->(我的博客)<--.嘿嘿 好嘞,言归正传,说说我们的效果. 其实就是实现横向滑动,进行选择. 原理: 鼠标按下, ...
- [置顶]
xamarin Tablayout+Viewpager+Fragment顶部导航栏
最近几天不忙,所以把项目中的顶部导航栏的实现归集一下.android中使用TabLayout+ViewPager+Fragment制作顶部导航非常常见,代码实现也比较简单.当然我这个导航栏是基于xam ...
- Xamarin Android Fragment的两种加载方式
android Fragment的重点: 3.0版本后引入,即minSdk要大于11 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fra ...
- 【吉光片羽】js横向滚动与浮动导航
1.横向滚动,这个方法是见过最简洁的了. #demo { background: #FFF; overflow: hidden; border: 1px dashed #CCC; width: 117 ...
- Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》
Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果.当然,在新能方便也做了大大的提高. ...
- Android 横向列表GridView 实现横向滚动
Android 横向列表实现,可左右滑动,如下图 1.主界面布局代码:activity_main.xml a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件b.G ...
随机推荐
- BZOJ 1260: [CQOI2007]涂色paint【区间DP】
Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...
- jenkins异常解答
1.安装插件时offline 需要更换插件管理中的升级URL http://mirror.xmission.com/jenkins/updates/current/update-center.js ...
- Centos 安装Python3的方法
由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到. [root@VM_105_217_centos Python-3.6.2]# ...
- 货车运输(codevs 3287)
题目描述 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过 ...
- Requests模拟登陆
requests模拟登陆知乎网站 实例 # -*- coding: utf-8 -*- __author__ = 'CQ' import requests try: import cookielib ...
- golang导出Excel表格
设置样式: package main import ( "github.com/tealeg/xlsx" "fmt" ) func main() { var f ...
- 如何选择 IT 技术书籍
★第1招:看网上评论 首先,上一些权威的图书网站,看看大伙儿的评价如何(要相信群众的眼睛是雪亮的).对于英文书籍,我一般上亚马逊网站去看看:中文书籍则上豆瓣网.这两个网站都提供星级评分,一般 > ...
- 非旋转Treap:用运行时间换调试时间的有效手段
非旋转Treap:用运行时间换调试时间的有效手段 Hello大家好,我们今天来聊一聊非旋转Treap. 相信各位或多或少都做过些序列上的问题.如果水题我们考虑暴力:不强制在线我们可能用过莫队和待修 ...
- codevs——2370 小机房的树
2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 小机房有棵焕狗种的树,树上有N个 ...
- codevs——1958 刺激
1958 刺激 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description saffah的一个朋友S酷爱滑雪,并且追求刺 ...