ViewGroup常用布局
2012-11-20 11:05
190 查看
(1)LinearLayout线性布局中的layout_weight作用?view元素的权重,0,1,2,默认为0,数值越小,权重越大。
(2)RelativeLayout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Type here:"/>
<EditText
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/label"/>
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:text="OK"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok"
android:text="Cancel"/>
</RelativeLayout>
(3)TableLayout
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="0,1,2">
<TableRow>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button1"
android:layout_column="0"
/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button2"
android:layout_column="1"
/>
</TableRow>
<TableRow>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button3"
android:layout_column="1"
/>
<Button android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button4"
android:layout_column="1"
/>
</TableRow>
<TableRow>
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button5"
android:layout_column="2"
/>
</TableRow>
</TableLayout>
(4)ListView
首先activity_main.xml文件
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp">
</TextView>
其次strings.xml
把要填充到ListView的元素写到res/values/strings.xml文件中的<string-array>元素中,然后java代码中动态读取.
<resources>
<string name="app_name">Test</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_main">MainActivity</string>
<string-array name="numbers_array">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
</string-array>
</resources>
最后java代码
package com.example.test;
import android.os.Bundle;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends ListActivity {
//注意这里类不是扩展自Acitvity,而是扩展自ListAcitivty
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
String[] numbers=getResources().getStringArray(R.array.numbers_array);
setListAdapter(new ArrayAdapter<String>(this,R.layout.activity_main,numbers));
ListView lv=getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),Toast.LENGTH_SHORT).show();
}
});
}
}
onCreate()函数中并不像往常一样通过setContentView()为活动(Activity)加载布局文件,替代的是通过setListAdapter(ListAdapter)自动添加一个ListView填充整个屏幕的ListActivity.ArrayAdapter的构造函数的参数为:this(表示应用程序的上下文context)、表示ListViewde布局文件(这里是R.layout.main)、插入ListView的List对象对数组
(这里是numbers)。
(5)GridView
首先,将图片放入
(6)TabView
其他类似。
设置每个标签的图标,每个图标应该有两个版本:一个是选中时的,一个是未选中时的。通常的设计建议是,选中的图标应该是深色(灰色),未选中的图标是浅色(白色),将图片放到res/drawable目录下并创建一个新的XML文件命名为
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, use grey -->
<item android:drawable="@drawable/a1"
android:state_selected="true" />
<!-- When not selected, use white-->
<item android:drawable="@drawable/a2" />
</selector>
androidmanifest.xml内容设置为:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" android:label="@string/title_activity_main" android:theme="@android:style/Theme.NoTitleBar"><intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AlbumActivity" android:label="@string/app_name" />
<activity android:name=".ArtistisActivity" android:label="@string/app_name" />
<activity android:name=".SongActivity" android:label="@string/app_name" />
</application>
</manifest>
java代码:
import android.os.Bundle;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.widget.TabHost;
public class MainActivity extends TabActivity {
//注意这里类不是扩展自Acitvity,而是扩展自TabAcitivty
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent=new Intent().setClass(this, ArtistisActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec=tabHost.newTabSpec("artists").setIndicator("Artists",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
intent =new Intent().setClass(this, AlbumActivity.class);
spec=tabHost.newTabSpec("albums").setIndicator("Album",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);
tabHost.addTab(spec);
intent=new Intent().setClass(this, SongActivity.class);
spec=tabHost.newTabSpec("songs").setIndicator("Songs:",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(2);
}
}
AndroidManifest.xml,添加[code]NoTitleBar主题到
为了防止编译出错,添加三个Activity
<activity android:name=".AlbumActivity" android:label="@string/app_name"></activity>
<activity android:name=".ArtistisActivity"android:label="@string/app_name"></activity>
<activity android:name=".SongActivity" android:label="@string/app_name"></activity>
(7)SlidingView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<SlidingDrawer
android:id="@+id/drawer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:handle="@+id/handle"
android:content="@+id/content">
<ImageView
android:id="@+id/handle"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_launcher"
/>
<AnalogClock
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#D0A0A0"
/>
</SlidingDrawer>
</RelativeLayout>
(2)RelativeLayout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Type here:"/>
<EditText
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/label"/>
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:text="OK"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok"
android:text="Cancel"/>
</RelativeLayout>
(3)TableLayout
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="0,1,2">
<TableRow>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button1"
android:layout_column="0"
/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button2"
android:layout_column="1"
/>
</TableRow>
<TableRow>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button3"
android:layout_column="1"
/>
<Button android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button4"
android:layout_column="1"
/>
</TableRow>
<TableRow>
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button5"
android:layout_column="2"
/>
</TableRow>
</TableLayout>
(4)ListView
首先activity_main.xml文件
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp">
</TextView>
其次strings.xml
把要填充到ListView的元素写到res/values/strings.xml文件中的<string-array>元素中,然后java代码中动态读取.
<resources>
<string name="app_name">Test</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_main">MainActivity</string>
<string-array name="numbers_array">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
</string-array>
</resources>
最后java代码
package com.example.test;
import android.os.Bundle;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends ListActivity {
//注意这里类不是扩展自Acitvity,而是扩展自ListAcitivty
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
String[] numbers=getResources().getStringArray(R.array.numbers_array);
setListAdapter(new ArrayAdapter<String>(this,R.layout.activity_main,numbers));
ListView lv=getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),Toast.LENGTH_SHORT).show();
}
});
}
}
onCreate()函数中并不像往常一样通过setContentView()为活动(Activity)加载布局文件,替代的是通过setListAdapter(ListAdapter)自动添加一个ListView填充整个屏幕的ListActivity.ArrayAdapter的构造函数的参数为:this(表示应用程序的上下文context)、表示ListViewde布局文件(这里是R.layout.main)、插入ListView的List对象对数组
(这里是numbers)。
(5)GridView
首先,将图片放入
res/drawable/
activity_main.xml设置
<GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" />
其次,java代码
public class MainActivity extends Activity { //注意这里类不是扩展自Acitvity,而是扩展自ListAcitivty @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GridView gv=(GridView)findViewById(R.id.gridview); gv.setAdapter(new ImageAdapter(this)); gv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(MainActivity.this, " " + position, Toast.LENGTH_SHORT).show(); } }); } }
自定义ImageAdapter
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c){ mContext=c; } @Override public int getCount() { // TODO Auto-generated method stub return mThumbIds.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } // create a new ImageView for each item referenced by the Adapter @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ImageView imageView; if(convertView==null){// if it's not recycled, initialize some attributes imageView=new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(85,85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else{ imageView=(ImageView)convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; } // references to our images private Integer[] mThumbIds = { R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d }; }
setLayoutParams(ViewGroup.LayoutParams):设置View的高度和宽度,这确保不管drawable中图片的大小,每个图片都被重新设置大小且剪裁以适应这些尺寸。
setScaleType(ImageView.ScaleType):声明图片应该向中心剪裁(如果需要的话)。
setPadding(int, int, int, int):定义补距,如果图片有不同的横纵比,小的补距将导致更多的剪裁以适合设置的ImageView的高度和宽度。
(6)TabView
TabHost必须是布局的根节点,它包含为了显示标签的
TabWidget和显示标签内容的FrameLayout。
使用标签在完全隔离的活动之间改变,在项目中建立三个隔离的Activity类:ArtistisActivity、AlbumActivity、SongActivity。它们每个表示一个分隔的标签。每个通过TextView显示简单的一个消息,
public class ArtistisActivity extends Activity { public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); TextView tv=new TextView(this); tv.setText("This is the Artists tab"); this.setContentView(tv); } }
其他类似。
设置每个标签的图标,每个图标应该有两个版本:一个是选中时的,一个是未选中时的。通常的设计建议是,选中的图标应该是深色(灰色),未选中的图标是浅色(白色),将图片放到res/drawable目录下并创建一个新的XML文件命名为
ic_tab_artists.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, use grey -->
<item android:drawable="@drawable/a1"
android:state_selected="true" />
<!-- When not selected, use white-->
<item android:drawable="@drawable/a2" />
</selector>
androidmanifest.xml内容设置为:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" android:label="@string/title_activity_main" android:theme="@android:style/Theme.NoTitleBar"><intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AlbumActivity" android:label="@string/app_name" />
<activity android:name=".ArtistisActivity" android:label="@string/app_name" />
<activity android:name=".SongActivity" android:label="@string/app_name" />
</application>
</manifest>
java代码:
import android.os.Bundle;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.widget.TabHost;
public class MainActivity extends TabActivity {
//注意这里类不是扩展自Acitvity,而是扩展自TabAcitivty
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent=new Intent().setClass(this, ArtistisActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec=tabHost.newTabSpec("artists").setIndicator("Artists",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
intent =new Intent().setClass(this, AlbumActivity.class);
spec=tabHost.newTabSpec("albums").setIndicator("Album",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);
tabHost.addTab(spec);
intent=new Intent().setClass(this, SongActivity.class);
spec=tabHost.newTabSpec("songs").setIndicator("Songs:",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(2);
}
}
AndroidManifest.xml,添加[code]NoTitleBar主题到
<activity>标记。这将移除默认应用程序的标题和顶端布局,给标签腾出位置.
<activity android:name=".MainActivity" android:label="@string/title_activity_main" android:theme="@android:style/Theme.NoTitleBar">
为了防止编译出错,添加三个Activity
<activity android:name=".AlbumActivity" android:label="@string/app_name"></activity>
<activity android:name=".ArtistisActivity"android:label="@string/app_name"></activity>
<activity android:name=".SongActivity" android:label="@string/app_name"></activity>
(7)SlidingView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<SlidingDrawer
android:id="@+id/drawer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:handle="@+id/handle"
android:content="@+id/content">
<ImageView
android:id="@+id/handle"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_launcher"
/>
<AnalogClock
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#D0A0A0"
/>
</SlidingDrawer>
</RelativeLayout>
相关文章推荐
- Android动画效果之自定义ViewGroup添加布局动画
- 自己定义ViewGroup控件(二)----->流式布局进阶(二)
- 自定义ViewGroup(4)等分格子布局
- android之自定义ViewGroup和自动换行的布局的实现
- HenCoder系列2-3小节知识点备忘——定制Layout(ViewGroup)的内部布局
- RadioGroup+ViewPager+Fragment的框架布局
- (安卓) 自定义ViewGroup (自定义ViewGroup的方式实现梯形布局)
- 自定义ViewGroup,流式布局FlowLayout
- Android编程重写ViewGroup实现卡片布局的方法
- Android自定义ViewGroup:实现简单的垂直方向线性布局(2)
- View及ViewGroup的布局方法及相互关系
- 布局动画适用于ViewGroup
- ViewGroup2——自定义实现流式布局
- Android ViewGroup添加布局动画
- Android:跟手滑动的布局ViewGroup
- 常用的布局和View常用属性
- 自定义ViewGroup--标题条加内容页的布局方式
- android之自定义ViewGroup和自动换行的布局的实现
- 自定义ViewGroup —— Tags标签布局
- 自定义ViewGroup(3):自定义流式布局