`
gryphone
  • 浏览: 433733 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

快捷方式Bar + ViewGroup - 自定义

阅读更多

TabActivity - 自定义

 

其实 这篇感觉极鸡肋 但是 TabActivity 在标签页太多情况下 会导致界面比较难看 所以今天尝试自己扩展一下

 

 

 

[原理]

 

用2 LinearLayout 完成之 一个用于存放Image 另一用于显示具体布局

 

可能有人会说 干嘛不用Gallery组件 显示Image  这是因为Gallery显示特性比较固定 只能水平显示 或者是我不知道 有知道的 望告知

 

 

 

[代码 步骤]

 

1. 定义布局:main.xml 其中 shortcut显示图片索引 info显示选择id content显示布局内容

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<LinearLayout  
	android:orientation="vertical"
    android:layout_width="50dip" 
    android:layout_height="wrap_content" 
    android:background="@drawable/dot"
    android:id="@+id/shortcut"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/info"
    />
</LinearLayout>
<LinearLayout  
	android:orientation="vertical"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="10dip"
    android:id="@+id/content"
    >
</LinearLayout>
</LinearLayout>

 

 

 

2. 定义List 用于存放各个标签布局

 

List<View> viewList;

 

 

3. View初始化

 

 

public void init(){
    	shortcutLinear = (LinearLayout)findViewById(R.id.shortcut);
    	contentLinearLayout = (LinearLayout)findViewById(R.id.content);
    	infoText = (TextView)findViewById(R.id.info);
    	
    	viewList = new ArrayList<View>();
    	
    	inflatorHelper = this.getLayoutInflater();
    }

 

 

4. 定义addTab() 用于接受图标索引 布局文件

 

public void addTab(int id,Drawable drawable,View view){
    	//1. to add ImageView into shortcut LinearLayout
    	ImageView iv = new ImageView(this);
    	iv.setImageDrawable(drawable);
    	shortcutLinear.addView(iv, id);
    	
    	//2. to add View into List<View>
    	viewList.add(id,view);
    }
    
    public void addTab(Drawable drawable,View view){
    	//1. to add ImageView into shortcut LinearLayout
    	ImageView iv = new ImageView(this);
    	iv.setImageDrawable(drawable);
    	shortcutLinear.addView(iv);
    	
    	//2. to add View into List<View>
    	viewList.add(view);
    }

 

 

5.  如何添加标签页

 

 

public void addExampleView(){
    	ImageView image = new ImageView(this);
    	image.setImageResource(R.drawable.robot);
    	addTab(this.getResources().getDrawable(R.drawable.icon),image);
    	
    	EditText edit = new EditText(this);
    	edit.setWidth(100);
    	addTab(1,this.getResources().getDrawable(R.drawable.hat),edit);
    	
    	TextView text = new TextView(this);
    	text.setText("Hello ~ Text!");
    	addTab(this.getResources().getDrawable(R.drawable.wyj),text);
    	
    	View panel1 = inflatorHelper.inflate(R.layout.panel1, null);
    	addTab(1,getResources().getDrawable(R.drawable.robot),panel1);
    }

 

 

 

6.  定义addClickListener()  用于注册LinearLasyout 所有ImageView

 

public void addClickListener(){
    	clickListener = new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				int id = v.getId();
				
				infoText.setText(" id:"+id);
				
				//to remove all ori View, and then add new View
				contentLinearLayout.removeAllViews();
				if(id < viewList.size()){
					contentLinearLayout.addView(viewList.get(id));
				}
			}
    		
    	};
    	
    	for(int i=1;i<shortcutLinear.getChildCount();i++){
    		ImageView iv = (ImageView)shortcutLinear.getChildAt(i);
    		iv.setId(i);
    		
    		iv.setOnClickListener(clickListener);
    	}
    }

 

 

 

7.  panel1.xml 布局如下:

 

<?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"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="name:"
    />
<EditText  
    android:layout_width="200dip" 
    android:layout_height="wrap_content" 
    />
<Button  
    android:layout_width="100dip" 
    android:layout_height="wrap_content" 
    android:text="OK"
    />
</LinearLayout>

 

 

8. emulator 运行截图:

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 petitlen 2010-06-12  
好文!这种扩展灵活又美观!

相关推荐

    Tutorial-StatusBar:StatusBar 的简单教程

    - 通过测量`ViewGroup.MarginLayoutParams`的topMargin,可以获取StatusBar的高度,然后用于布局计算。 - 需要注意不同设备和Android版本的StatusBar高度可能不同。 5. **添加和管理通知** - 使用`...

    在android主界面模拟iphone的bar

    1. **自定义View组件**:要模拟iPhone的bar,我们需要创建一个新的`View`类,继承自`ViewGroup`,这样可以容纳并管理多个子视图(快捷键)。这个自定义`View`将包含一个可滑动的区域,用于放置快捷方式图标。我们...

    Android UI模板设计---TopBar(标题栏)

    本案例中,我们采用自定义ViewGroup的方式,以获得更高的灵活性和自定义程度。 首先,我们需要创建一个新的布局文件,比如`top_bar.xml`,在此文件中定义TopBar的结构,包括标题和按钮等。可以使用LinearLayout或...

    ActionBarSherlock

    - **向下兼容**:通过自定义ViewGroup和使用反射技术,ActionBarSherlock使得Action Bar功能能在Android 2.1及以上的版本中运行。 - **样式和主题**:提供了丰富的样式和主题,允许开发者自定义Action Bar的颜色、...

    android原生systemUI源码4.2.2

    - **StatusBar**: 状态栏,显示网络状态、电量、时间等基本信息,同时管理通知和下拉快捷设置。 - **NotificationPanel**: 通知面板,包含通知列表和快速设置区域,通过从顶部滑动显示。 - **QuickSettingsTile**...

    Android 系统主界面下方的小按钮滑动效果--SlideD-IT计算机-毕业设计.zip

    在Android系统中,主界面下方通常有一排小按钮,被称为底部导航栏(Bottom Navigation Bar),它包含几个常用功能的快捷入口。"SlideD"项目是一个针对这个底部导航栏实现滑动效果的Android应用源码示例,适用于毕业...

    Android项目之——页面特效集合(附源码).zip

    9. **通知和悬浮窗**:在Android中,通知是向用户传达信息的重要方式,而悬浮窗则可以提供快捷操作。源码可能包含了如何创建和管理这两类元素。 10. **Material Design 设计规范**:项目可能遵循了Material Design ...

    Android-Java-HideActionBarWholeProject:Android技巧

    在Android应用开发中,操作栏(ActionBar)是用户界面中的一个重要组成部分,通常显示应用的logo...记住,良好的用户体验是设计的关键,隐藏Action Bar只是实现沉浸式UI的一种方式,应当根据项目的需求来权衡是否采用。

    PopupWindow全屏显示以及适配不同手机屏幕之 应用实例 更换头像,拍照,相册选取附带动画效果

    PopupWindow在Android开发中是一种非常实用的控件,它能够以弹出窗口的形式展示内容,通常用于实现一些快捷操作或临时交互。在这个应用实例中,我们主要探讨如何将PopupWindow设置为全屏显示,适配不同手机屏幕,...

    Android悬浮窗使用兼容6.0

    在Android开发中,悬浮窗(通常称为Float Window或System Bar)是一种可以浮动在其他应用上方显示的窗口,常用于提供快捷操作或者实时信息展示。在Android 6.0(API Level 23)及更高版本中,由于权限管理的改变,...

    androidjava源码-com_android_systemui:我的SGS3rom的systemuijava源代码

    1. **状态栏**:`StatusBar`类是状态栏的实现,处理网络连接、电池状态、时间等图标显示。源码会揭示如何处理触摸事件,如何显示和隐藏通知,以及如何与系统服务进行通信。 2. **通知中心**:`...

Global site tag (gtag.js) - Google Analytics