- 浏览: 242275 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
maotou1988:
android基于netty的发送图片与文字demo,楼主共勉 ...
在android中使用netty框架通信 -
ZSRTFAT:
学习了,谢谢分享
android 基于surfaceview 的多点触控实现 -
charlotte:
学习了!!!!!
Java nio 客户端连接Server -
nilo:
您好, 本人菜鸟, 正在学习设计模式. 当我学习完简单工厂模式 ...
策略模式 -
fokman:
一江春水邀明月 写道缺少SocketInfoUtils Th ...
Java nio 客户端连接Server
在编写android应用程序的过程中,经常会使用到导航控件。如果每一个activity都需要用到导航控件,可以将这个导航控件独立出来,方便程序开发。
写一个导航的代码类:
public class NavigationBar extends RelativeLayout implements OnClickListener { public static final int NAVIGATION_BUTTON_LEFT = 0; public static final int NAVIGATION_BUTTON_RIGHT = 1; private Context mContext; private NavigationBarListener mListener; public NavigationBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } public NavigationBar(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public NavigationBar(Context context) { super(context); init(context); } private void init(Context context) { mContext = context; RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(-1, -2); this.setLayoutParams(lp); this.setBackgroundResource(R.drawable.navigation_bar_bg); } public void setLeftBarButton(String title) { setButton(title, NAVIGATION_BUTTON_LEFT); } public void setRightBarButton(String title) { setButton(title, NAVIGATION_BUTTON_RIGHT); } private void setButton(String title, int which) { // remove the old button (if there is one) Button oldButton = (Button) this.findViewWithTag(new Integer(which)); if (oldButton != null) this.removeView(oldButton); Button newButton = new Button(mContext); newButton.setTag(new Integer(which)); // used to determine which button is pressed and to remove old buttons // set OnClickListener newButton.setOnClickListener(this); // set LayoutParams RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(-2, -2); if (which == NAVIGATION_BUTTON_LEFT) lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); else if (which == NAVIGATION_BUTTON_RIGHT) lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); else throw new IllegalArgumentException("Parameter 'which' must be 0 or 1"); lp.addRule(RelativeLayout.CENTER_VERTICAL); lp.setMargins(10, 0, 10, 0); newButton.setLayoutParams(lp); // set button text newButton.setText(title); newButton.setTextSize(12); newButton.setTextColor(Color.WHITE); // set button drawable newButton.setBackgroundResource(R.drawable.navigation_bar_btn); // add button this.addView(newButton); } public void setBarTitle(String title) { // remove old title (if exists) TextView oldTitle = (TextView) this.findViewWithTag("title"); if (oldTitle != null) this.removeView(oldTitle); TextView newTitle = new TextView(mContext); newTitle.setTag("title"); // set LayoutParams RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(-2, -2); lp.addRule(RelativeLayout.CENTER_IN_PARENT); lp.setMargins(0, 30, 0, 30); newTitle.setLayoutParams(lp); // set text newTitle.setText(title); newTitle.setTextSize(22); newTitle.setTextColor(Color.WHITE); // add title to NavigationBar this.addView(newTitle); } public void setNavigationBarListener(NavigationBarListener listener) { mListener = listener; } @Override public void onClick(View v) { int which = ((Integer) v.getTag()).intValue(); if (mListener != null) { mListener.OnNavigationButtonClick(which); } } /** * Listener for NavigationBar. */ public interface NavigationBarListener { /** * Called when the user presses either of the buttons on the NavigationBar. * * @param which - indicates which button was pressed, ie: NavigationBar.NAVIGATION_BUTTON_LEFT */ public void OnNavigationButtonClick(int which); } }
背景样式定义navigation_bar_bg.xml:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:angle="270" android:endColor="#ff050708" android:startColor="#ff595959" android:type="linear" /> </shape> </item> </selector>
导航按钮样式定义navigation_bar_btn.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <gradient android:angle="270" android:endColor="#ff495a95" android:startColor="#ff7684c1" /> <stroke android:width="1px" android:color="#FF000000" /> <corners android:radius="6dp" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape> </item> <item> <shape> <gradient android:angle="270" android:endColor="#ff999999" android:startColor="#ff333333" /> <stroke android:width="1px" android:color="#FF000000" /> <corners android:radius="6dp" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape> </item> </selector>
那么在activity怎么使用呢?
activity调用代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.change_device); NavigationBar nb = (NavigationBar)findViewById(R.id.detailNavBar); nb.setLeftBarButton(getString(R.string.cancel)); nb.setRightBarButton(getString(R.string.save)); nb.setBarTitle(getString(R.string.details)); NavigationBar.NavigationBarListener nbl = new NavigationBar.NavigationBarListener() { @Override public void OnNavigationButtonClick(int which) { if (which == NavigationBar.NAVIGATION_BUTTON_LEFT) { finish(); } else { } } }; nb.setNavigationBarListener(nbl); }
在layout里面定义我们的导航控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<com.NavigationBar
android:id="@+id/detailNavBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/deviceName"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<Button
android:id="@+id/removeBtn"
android:layout_width="260dp"
android:background="@drawable/btn_red"
android:layout_height="wrap_content"
style="@style/ButtonText"
android:layout_gravity="center_horizontal"
android:text="@string/remove" />
</LinearLayout>
现在看看效果图:
那么在你以后想使用这个控件的时候,就可以直接调用了。
发表评论
-
获得手机相关信息的实现方法
2015-04-04 00:55 824本文介绍了如何通过android提供的servi ... -
android判断当前sdk版本以及是否是平板
2013-11-19 13:53 1329最近做了一个项目中需要使用appWidget,但是 ... -
android 程序检查当前应用是否在运行
2012-11-09 17:05 1123最近做一个项目,需要知道当前的android 程序是 ... -
netty 找不到org.jboss.netty.bootstrap.ClientBootstrap解决
2012-09-25 14:20 4093今天碰到一个莫名其妙的问题,在做socket连接的时候发 ... -
Netty 之Oio程序编写
2012-09-24 14:06 4602今日将android里面使用的socket 方式改成 ... -
定义文本样式
2012-09-06 14:19 1094android程序中的按钮经常需要定义文字的大小,是否加粗,居 ... -
点击按钮显示不同的状态
2012-09-06 14:05 1031android给我们提供的UI还比较丰富,但是基本上都 ... -
android 两个listView 共存的显示问题
2012-08-07 09:55 2542如果在一个layout里面需要定义有两个listvie ... -
定义带箭头的Button 样式
2012-08-02 10:58 11221定义一个圆角的Button 样式 <style ... -
android UI入门三 自定义背景样式
2012-08-01 15:23 1407在android 开发应用中,大部份的开发人员 ... -
android UI入门二 定义图片横竖屏切换正确显示
2012-07-30 13:20 3247android开发的时候通常会使用到横竖屏切换,但是 ... -
android UI入门一
2012-07-24 12:20 955在ios系统中,常常看到绚丽的画面让人心动不已。然而在 ... -
android spinner 实现国码选择
2012-07-13 15:33 3981android 中得Spinner相当于是一个下拉框 ... -
在自己的android应用中调用打电话实现
2012-07-13 15:10 1090最近在做一个项目,需要在自己写的应用中调用打电话给别人 ... -
android 定义圆角Button
2012-06-30 15:31 5087定义styles.xml <?xml version= ... -
android observer 处理handler消息
2012-06-12 09:41 2087在开发android网络应用程序,通常都会使用han ... -
android wifi 处理
2012-06-12 09:35 3229在android应用程序中可以很方便的使用wifi来处理不同的 ... -
android canvas 使用
2012-04-06 09:38 7685Canvas 又称为画布,在游戏开发过程中是一个经常使用的类。 ... -
android 基于surfaceview 的多点触控实现
2012-04-06 08:55 12482hello,各位朋友。最近接到一个功能需要实现多 ... -
给android imageView(图片) 添加超链接
2012-03-29 09:29 8099hi ,各位好朋友,最近忙于开发没有时间更新博客。 有很多朋 ...
相关推荐
在Android开发中,自定义导航控件是一种常见的需求,它能提供更为灵活和个性化的界面设计。本教程将深入探讨如何在Android应用中创建一个自定义的导航控件,并通过动态添加控件来实现功能的扩展。我们将主要关注以下...
总的来说,这个项目涵盖了Android自定义视图、手势识别、图像缩放和平移以及图形绘制等多个关键知识点。通过这样的实践,开发者可以深入理解Android系统的底层机制,并提升自己的定制化开发能力。在实际应用中,这样...
本文将详细讲解如何创建一个自定义的标题导航控件,分为五个关键步骤。 ### 1. 自定义控件属性的定义 首先,我们需要定义自定义控件的属性。这通常在`res/values/attrs.xml`文件中进行。例如,我们可以定义标题...
在Android应用开发中,自定义控件是提升用户体验和界面个性化的重要手段。本文将深入探讨如何实现一个自定义的...不断学习和实践,将帮助你更好地理解和掌握Android自定义控件的精髓,为你的应用带来更丰富的用户体验。
标题“Android应用源码之Android 自定义头部控件,简单易用.zip”提示我们,这个压缩包包含了一个关于Android自定义头部控件的源码示例,其特点是简单易用。下面我们将深入探讨这一主题。 首先,自定义头部控件通常...
在客户端,我们可以使用RecyclerView或者ListView来展示这些数据,并结合自定义的分页控件进行导航。 在Android中,创建自定义分页控件的第一步是设计UI。一个基本的分页控件通常包括页码显示、加载更多按钮以及...
本资源“安卓自定义控件相关-Android自定义头部控件简单易用.rar”提供了关于创建自定义头部控件的示例,这在构建具有个性化的APP时非常有用。 标题中的“自定义头部控件”通常指的是在应用顶部显示的区域,如导航...
在Android开发中,自定义导航栏是一个常见的需求,特别是在追求个性化设计和功能扩展时。本文将详细介绍如何在Android项目中创建一个可以滑动且数量可变的自定义导航栏,以此来满足特定的用户交互需求。 首先,我们...
在Android应用开发中,自定义...开发者可以通过这个案例深入理解Android自定义控件的原理和实现,提升自己的开发技能。同时,这也是一个很好的实践机会,学习如何在实际项目中应用自定义控件,以满足应用的独特需求。
以上就是Android自定义控件的一般流程和`StickyNavLayout`的关键特性。实际开发中,开发者通常会结合Android的属性动画、RecyclerView分组视图等高级特性,使自定义控件更加灵活和强大。同时,使用Kotlin的扩展函数...
在Android应用开发中,自定义头部控件是一个常见的需求,它可以为应用提供独特的用户体验和界面设计。本篇文章将深入探讨如何实现一个自定义的多变头部控件,以供开发者们借鉴和学习。 首先,我们要理解头部控件...
《Android自定义控件入门到实战》是一本深入讲解Android平台下自定义控件开发的教程,源码2018.10版提供了一套完整的实践案例,帮助开发者从基础到进阶全面掌握自定义控件的制作技巧。这份资料涵盖了从基本的自定义...
本项目“Android自定义头部控件,简单易用”是一个毕业设计学习的源码Demo,旨在帮助开发者掌握如何在Android应用中创建自定义视图组件。 首先,我们要理解在Android中自定义头部控件的重要性。通常,头部控件包括...
首先,我们要理解Android自定义控件的基本流程。这通常包括以下步骤: 1. **创建布局文件**:在res/layout目录下创建XML布局文件,定义自定义头部控件的视图结构。你可以包含各种Android原生组件,如ImageView、...
本文将深入探讨如何在Android中创建一个自定义的顶部导航栏,这个控件可以作为应用的主要交互入口,展示多个可选的页面或功能。 首先,让我们了解顶部导航栏的基本构成。通常,它包含以下几个部分: 1. **标题**:...
2. **自定义头部控件的设计**:头部控件通常用于显示应用的主要标识或导航元素。设计时应考虑其在不同屏幕尺寸和方向上的适应性,以及与触摸事件的交互。 3. **布局管理**:可能使用到LinearLayout、RelativeLayout...
首先,自定义头部控件通常用于应用的顶部,可以包含导航栏、标题、搜索框等元素,以提供独特的视觉效果和交互体验。在Android中,开发者可以利用View或ViewGroup类来创建自定义控件。对于初学者来说,理解View和...
总的来说,Android自定义头部控件允许开发者打破系统的限制,创造出符合应用风格的独一无二的UI元素。通过熟练掌握自定义控件的创建方法,开发者不仅可以提升应用的用户体验,还能提高自身在Android开发领域的专业...