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 ...
随机推荐
- [BZOJ2118] 墨墨的等式(最短路)
传送门 好神啊.. 需要用非负数个a1,a2,a3...an来凑出B 可以知道,如果一个数x能被凑出来,那么x+a1,x+a2.......x+an也都能被凑出来 那么我们只需要选择a1~an中任意一 ...
- android开发里遇到的坑——eclipse项目导入android studio以后Run按钮灰色
android studio编译有错误但是没有提示给用户,关闭android studio重新启动项目后,会显示错误,修复以后即可!
- Codeforces 432D Prefixes and Suffixes kmp
手动转田神的大作:http://blog.csdn.net/tc_to_top/article/details/38793973 D. Prefixes and Suffixes time limit ...
- VScode开发Vue初尝试(一)
由于公司近期有新的H5项目开发,而前端的同事也离职了,所以就临时顶缸,研究学习一下Vue框架开发. 本人也是初学,在学习过程中,把一些学习所得分享出来,可能会有很多问题和疏漏,希望大家能够多多指正,共 ...
- Python知识图谱
一.Python全栈图谱 2.Python语言高级 Python 全栈工程师前端 Python全栈工程师后端 Python Linux运维自动化开发 Python KaliLinux信息安全开发和使用 ...
- 推荐几款屏幕录制工具(可录制GIF)
我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...
- JDK动态代理理解精髓
1.Java动态代理的关键是:Proxy类要和InvocationHandler的接口实现类,要用同一个目标target对象class,所以精髓是InvocationHandler和Proxy是一 ...
- NSTimer与NSRunLoop的关系分析
NSTimer与NSRunLoop的关系分析 发表于 2013 年 6 月 27 日 由 bluev | 6 次浏览 最近关于NSTimer和NSRunLoop的关系,做了一个小试验.代码地址:htt ...
- "听话"的品格的症状
反思了一下,也许是因为以前比较听话,听大人的话,听老师的话,听长辈的话.听电视剧的话..........哈哈 现在发现,世界是靠自己去认识,去体会的,别人的经验都只能作为参考,绝对不能不加思考的照搬硬 ...
- CodeForces 321A Ciel and Robot(数学模拟)
题目链接:http://codeforces.com/problemset/problem/321/A 题意:在一个二维平面中,開始时在(0,0)点,目标点是(a.b),问能不能通过反复操作题目中的指 ...