Android高级应用开发(基础篇) - stage6 - 学习笔记(中)
来源:互联网 发布:网络监控4根网线接法 编辑:程序博客网 时间:2024/06/07 06:28
关于View和Widget的一些属性,请参见“Android中文翻译组——Android中文API——android.widget合集(中)”
有些属性是一些控件特有的
有些属性是冲突的,根据优先级决定是否有效
TextView中比较重要的有:
1、能在文字的各个方向展示一张图片,省却了布局的一些麻烦
android:drawableBottom
在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。
android:drawableLeft
在text的左边输出一个drawable,如图片。
android:drawableRight
在text的右边输出一个drawable,如图片。
android:drawableTop
在text的正上方输出一个drawable,如图片。
android:drawablePadding
设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。
代码还可以通过textView.setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)方法设定上下左右的图像
2、文字过长时的处理
android:ellipsize
设置当文字过长时,该控件该如何显示。有如下值设置:”start”—–省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)
跑马灯效果
android:ellipsize="marquee"android:marqueeRepeatLimit="marquee_forever"android:singleLine="true"android:focusable="true"android:focusableInTouchMode="true"
必须设为单行显示
focusable是切换得到的焦点,focusableInTouchMode是手指点击获得焦点,
这两项也要设置才能实现跑马灯效果
3、设置文字宽度
android:ems
设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度
4、选中高亮颜色
android:shadowColor
指定文本阴影的颜色,需要与shadowRadius一起使用。
5、autoLink TextView中出现网页、邮箱、电话等时自动识别,打开连接或拨号
android:autoLink
设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)
android:linksClickable
设置链接是否点击连接,即使设置了autoLink。
android:textColorLink
文字链接的颜色.
6、使用Html
TextView textView = (TextView)findViewById(R.id.textView);textView.setText(Html.fromHtml("<br>Hi<br><img src=\"***\">"));
Any <img> tags in the HTML will display as a generic replacement image which your program can then go through and replace with real images.
图片下载需要耗时,会显示替代图片,直到你自己覆盖这个图片
Html.fromHtml还有一个方法
public static Spanned fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
Any <img> tags in the HTML will use the specified ImageGetter to request a representation of the image (use null if you don't want this) and the specified TagHandler to handle unknown tags (specify null if you don't want this).
处理<img>标签和任何未知的标签
Html.ImageGetter imageGetter = new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { if(source != null) { // 这样可以将图片插入到文字中间 BitmapDrawable returnDrawable = (BitmapDrawable)getResources().getDrawable(R.drawable.image); // BitmapDrawable必须要设置 setBounds returnDrawable.setBounds(0, 0, returnDrawable.getIntrinsicWidth(), returnDrawable.getIntrinsicHeight()); return returnDrawable; } else { return null; } } }; Html.TagHandler tagHandler = new Html.TagHandler() { // 读取每一个标签,遇到未知标签时进行处理 @Override public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { Toast.makeText(MainActivity.this, tag, Toast.LENGTH_SHORT).show(); } }; TextView textView = (TextView)findViewById(R.id.textView); textView.setText(Html.fromHtml("<br>Hi<br><img src=\"***\">", imageGetter, null));
7、Span机制:SpannableStringBuilder和SpannableString灵活拼接字符串
TextView textView = (TextView)findViewById(R.id.textView);SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("大家好,今天天气不错哦!");// 除了ImageSpan,还有其他的各种设置颜色、蒙版、点击事件等等的Span类 ,都在android.text.style包中ImageSpan imageSpan = new ImageSpan(MainActivity.this, R.drawable.image);ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(MainActivity.this, "点击", Toast.LENGTH_SHORT).show(); }};// ImageSpan设置的图片会插在4和5的位置之间,第四个参数在Spanned类中有说明// setPan的第四个参数是是否包含起始/结束的点spannableStringBuilder.setSpan(imageSpan, 4, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);// ClickableSpan设定0-4之间的点击事件spannableStringBuilder.setSpan(clickableSpan, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE);textView.setText(spannableStringBuilder);
Button中比较重要的有
1、点击变换的背景图片,设置一个selector
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:state_focused="true" android:drawable="@drawable/button_bg_01_press" /> <item android:state_pressed="false" android:state_focused="true" android:drawable="@drawable/button_bg_01_press" /> <item android:state_pressed="true" android:state_focused="false" android:drawable="@drawable/button_bg_01_press" /> <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/button_bg_01" /> <item android:drawable="@drawable/button_bg_01" /></selector>
这里要注意:
最后一条表示:什么属性都不设的时候总是用button_bg_01
但是这个代码逻辑的实现是使用的if-else方式,
所以如果这条语句放在最前面的话就会无论如何都不会变换
所以,如果要设置什么属性都不带的状态时,一定要放在最后,或者直接不要使用
2、onClick、onLongClick这些点击事件的本质是onTouchEvent
如果同时设置了onClick和onLongClick事件,那么默认情况下长按时两个方法都会被调用
可以再onLongClick事件执行完毕后return true;表示事件已经被处理,这样就不会调用onClick事件了
ToggleButton中比较重要的有:
1、onCheckedChangeListenner与onCheckedChanged方法
2、xml属性:android:textOn, android:textOff,
background + selector
或者在OnCheckedChangeListener中切换背景图
CheckBox中比较重要的有:
1、onCheckedChangeListener与onCheckedChanged方法
RadioGroup中比较重要的有:
1、RadioGroup中包含若干个RadioButton
2、
RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.radio0: break; case R.id.radio1: ... default: break; } } });
详细出处参考:http://www.jb51.net/article/34180.htm
3、
<RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:drawableLeft="@android:drawable/btn_star"/>
android:button选项设置为@null,能把RadioButton的默认图标(圆点)隐藏
android:drawableLeft可以自己设定图片的样式
可以使用自己的图片,也可以使用系统自带的图片,如这段示例代码中的
系统自带图片的位置在源码目录\frameworks\base\core\res\res的相关drawable目录中
4、RadioGroup可以当做工具条
Adapter模式
1、
数据源:一组数据的集合
2、常用的Android adapter
最基本的是Adapter的接口,下面分为了ListAdapter和SpinnerAdapter两个接口
BaseAdapter同时实现了这两个接口,所以是一般自己定义Adapter的基类
3、步骤
(1)建立数据源
(2)建立adapter
(3)建立adapter - source连接
(4)绑定adapter到界面组件
Spinner中比较重要的有:
1、建立一个基本的Spinner
<Spinner android:id="@+id/planets_spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" />
<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="planets_array"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array></resources>
Spinner spinner = (Spinner) findViewById(R.id.spinner);// Create an ArrayAdapter using the string array and a default spinner layoutArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item);// Specify the layout to use when the list of choices appearsadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// Apply the adapter to the spinnerspinner.setAdapter(adapter);
public class SpinnerActivity extends Activity implements OnItemSelectedListener { ... public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item was selected. You can retrieve the selected item using // parent.getItemAtPosition(pos) } public void onNothingSelected(AdapterView<?> parent) { // Another interface callback }}
2、xml中的属性
android:prompt 弹出的选择框的标题
android:entries 绑定数据(一般不用这个)
3、OnItemSelectedListener中包含onItemSelected和onNotiongSelected方法
public class SpinnerActivity extends Activity implements OnItemSelectedListener { ... public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item was selected. You can retrieve the selected item using // parent.getItemAtPosition(pos) } public void onNothingSelected(AdapterView<?> parent) { // Another interface callback }}
4、自定义Adapter
package com.primemobi.PrimeToday.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;/** * Created by Administrator on 14-1-14. */public class UserAdapter extends BaseAdapter { List<User> mUsers; Context mContext; public UserAdapter(Context context, List<User> users){ mContext = context; mUsers = users; } @Override public int getCount() { return mUsers.size(); } @Override public Object getItem(int position) { return mUsers.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // convertView : The old view to reuse, if possible. convertView = LayoutInflater.from(mContext).inflate(R.layout.***, null); TextView textView = (TextView)convertView.findViewById(R.id.textView); // .... return convertView; }}
ProgressBar中比较重要的有:
1、 横向进度条是因为使用了系统样式
style="?android:attr/progressBarStyleHorizontal"
定义在\frameworks\base\core\res\res\values\attrs.xml中
2、
public class MyActivity extends Activity { private static final int PROGRESS = 0x1; private ProgressBar mProgress; private int mProgressStatus = 0; private Handler mHandler = new Handler(); protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.progressbar_activity); mProgress = (ProgressBar) findViewById(R.id.progress_bar); // Start lengthy operation in a background thread new Thread(new Runnable() { public void run() { while (mProgressStatus < 100) { mProgressStatus = doWork(); // Update the progress bar mHandler.post(new Runnable() { public void run() { mProgress.setProgress(mProgressStatus); } }); } } }).start(); } }
3、
android:progress 一级进度
android:secondaryProgress 二级进度(例如视频缓存时用)
SeekBar中比较重要的有:
1、android:thumb 设定拖动按钮(进度拖动块)的图片
2、OnSeekBarChangeListener下的方法:
onStartTrackingTouch、onProgressChanged、onStopTrackingTouch
SeekBar seekBar = (SeekBar)findViewById(R.id.seekBar); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });
QuickContactBadge中比较重要的有:
这是继承自ImageView的控件,类似contact头像
点击了会像通讯录一样弹出拨打电话或者短消息
QuickContactBadge quickContactBadge = (QuickContactBadge)findViewById(R.id.quickContactBadge); // String phoneNumber // boolean lazyLookup : 设为true的话点击才会查询 quickContactBadge.assignContactFromPhone("12345678901", true);
找到的话会显示手机号为12345678901的用户的通讯录页面
找不到的话会提示添加手机号到联系人
RatingBar中比较重要的有:
OnRatingBarChangeListener 中的 onRatingChanged方法
EditText中比较重要的有:
1、获取焦点
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content"> <requestFocus></requestFocus></EditText>
android:inputMethod 弹出的输入法是哪一个,填应用包名
3、android:numeric 切换数字输入法
android:digital 显示的内容是数字
4、在drawable中自定义shape
<?xml version="1.0" encoding="utf-8"?><!-- 定义一个矩形圆形,颜色为红色,愿景为5dp半径 --><!-- shape也有相关属性,android:shape中可以定义形状为line/oval/rectangle/ring --><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 拐角,可以设置统一拐角圆半径,也可以单独设置 --> <corners android:radius="5dp"></corners> <solid android:color="#FF0000" ></solid></shape>
5、EditText的android:drawableLeft设置的图是包含在EditText内部的
AutoCompleteTextView中比较重要的有:
1、
public class CountriesActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.countries); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES); AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list); textView.setAdapter(adapter); } private static final String[] COUNTRIES = new String[] { "Belgium", "France", "Italy", "Germany", "Spain" }; }
每一行的布局这里用到的是系统自带的,可以由用户自己定义
2、在xml中也有一些特殊的属性
ListView中比较重要的有:
1、xml中的属性
android:divider 分隔线的设置
android:choiceMode 有singleChoice和multiplChoice选项,设置多选还是单选(配合系统定义的view)
2、继承自ListActivity可以通过getListView()获取一个内置的ListView,但是用起来并不灵活
3、onItemClick和onItemSelect的区别:select是获得焦点就执行
4、观察者模式(发布—订阅模式)
Subject是被观察者的接口,Observer是观察者的接口
ConcreteSubject和ConcreteObserver分别是两个接口的实现类
就如同Adapter的notifyDataSetChanged()一样,当数据发生变化是通知ListView
查看这一部分的源码:
首先看到ArrayAdapter的源码,发现它的notifyDataSetChanged里面调用的是父类的方法
查看BaseAdapter的源码
我们看到有一个DataSetObservable类的对象,这个类继承自Observable,这就是我们的被观察者了
(Adapter本身不是被观察者,而是Adapter里的DataSetObservable对象是被观察者)
DataSetObservable的源码
调用了每个观察者的onChanged的方法(这个方法实现在Java中的Observer类中)
查看ListView的代码,setAdapter方法
我们发现是绑定了一个AdapterDataSetObserver的对象的,这个类是ListView的一个内部类
被调用onChanged时,会调用AdapterView下同名类的方法
我们发现其实notifyDataSetChanged的时候,是有重新requestLayout的
5、Cursor Adapter
// 数据集 Cursor cursor = getContentResolver().query(Contacts.Phones.CONTENT_URI, null, null, null, null); // Cursor Adapter SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor, new String[]{Contacts.Phones.NAME, Contacts.Phones.NUMBER}, new int[]{R.id.text1, R.id.text2});
ExpandableListView中比较重要的有:
1、可以继承ExpandableListActivity实现,同继承自ListActivty
2、需要分别设置group和child的数据源和layout,同时group的布局还分为展开和闭合两种
GridView中比较重要的有:
1、好吧,也确实没什么可写的,看看xml中的相关属性吧
<?xml version="1.0" encoding="utf-8"?><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"/>
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); GridView gridview = (GridView) findViewById(R.id.gridview); gridview.setAdapter(new ImageAdapter(this)); gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show(); } });}
public class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return mThumbIds.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } // create a new ImageView for each item referenced by the Adapter public View getView(int position, View convertView, ViewGroup parent) { 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.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };}
ScrollView中比较重要的有:
1、ScrollView也是一个FrameLayout,由于FrameLayout 是一个容器,并且有且仅有一个子元素
所以ScrollView也只能有一个子元素,通常用LinearLayout
2、通常将其放在根元素上(命名空间xmlns应该放到根元素上)
3、android:scrollbarThumbVertival android:scrollbarTrackVertical可以设置侧边进度条样式
4、有时需要获取滑动到的位置(等以后实验补上)
SlidingDrawer中比较重要的有:
1、
<SlidingDrawer android:id="@+id/drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:handle="@+id/handle" android:content="@+id/content"> <ImageView android:id="@id/handle" android:layout_width="88dip" android:layout_height="44dip" /> <GridView android:id="@id/content" android:layout_width="match_parent" android:layout_height="match_parent" /> </SlidingDrawer>
SlidingDrawer的属性android:handle和android:content是指向两个组件(例如包含在内的ImageView和GridView)的
android:handle是SlidingDrawer关闭时打开的按钮的
android:content是SlidingDrawer打开时的页面的的界面
2、SlidingDrawer的一些属性
android:animationOnClick 打开的动画效果(也可以调用系统自带的,有些可能没效果)
3、事件的监听:OnDrawerOpenListener和OnDrawerCloseListener(滑动完成才调用)
4、SlidingDrawer关闭时的界面设置在外面就可以,或者在SlidingDrawer的background中设定一个布局
TabHost中比较重要的有:
1、TabHost是整个页面,包含Tab页跟每页的内容,是一个整的控件,继承自FrameLayout
而TabWidget是只有Tab页部分(头部分)的空间,继承自LinearLayout
2、布局
3、可以继承TabActivty实现
4、TabHost.TabSpec设定每一页,添加到TabHost(每一页内容都是个Activity,通过Intent传入)
添加每一页到TabHost就可以了,setCurrentTab设置当前显示哪一页
5、onTabChanged,处理一些切换页面的事件
WebView中比较重要的有:
1、loadData、loadDataWithBaseUrl、loadUrl等方法加载内容
ImageView中比较重要的有:
1、ImageButton继承自ImageView,但是会自动加上Button的背景,只要设置了background就能消掉
(ImageButton的图片跟ImageView一样,是通过android:src属性设置上的)
Gallery中比较重要的有:
1、
Gallery gallery = (Gallery)findViewById(R.id.gallery); gallery.setAdapter(new ImageAdapter()); gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } });
ImageSwitcher中比较重要的有:
1、ImageSwitcher、ImageSwitcher 本质上都是ViewSwitcher,
ImageSwitcher的很多方法和属性都在父类的ViewSwitcher中
2、ImageSwitcher一般都是与Gallery配合使用,下面放Gallery展示小图,上面用ImageSwitcher展示图片
3、可以设置android:inAnimation 和 android:outAnimation效果
4、
ImageSwitcher imageSwitcher = (ImageSwitcher)findViewById(R.id.imageSwitcher); // 必须要设置一个工厂,返回一个View imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { return new ImageView(MainActivity.this); } }); imageSwitcher.setImageResource(mImages[mIndex]);
ImageSwithcher只是一个容器,需要setFactory返回一个View
源码:
DatePicker中比较重要的有:
1、配置显示时间,年份范围等等属性
2、有一个初始化方法
init(int year, int monthOfYear, int dayOfMonth, OnDateChangedListener onDateChangedListener)
3、init初始化方法,传入初始化时间,以及一个Listener监测日期改变
DatePicker datePicker = (DatePicker)findViewById(R.id.datePicker); Calendar calendar = Calendar.getInstance(); datePicker.init(calendar.get(Calendar.YEAR) + 1, calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { } });
下面开始讲解布局
公共属性
控件外部的相关属性都有layout_前缀
而空间内部的相关属性都不带
1、layout_width,layout_height
注意:父子控件layout属性不要相互依赖
2、layout_weight 是一个float型的参数
如果设为0,表示不拉伸,否则按照比重分配剩余空间进行拉伸
这样如果平行有两个控件,比如一个TextView和EditText,
TextView长度固定,需要EditText填满整个一行
只需要将TextView的layout_weight属性设为0,或者直接不设置该属性
将EditText的layout_weight的属性随便设置,例如设为1,
则由EditText独自分配所有剩余的空间
说明:layout_weight分配的是空间中分配给空间后的剩余控件的比重
3、gravity 有子对象针对子对象,没有子对象针对空间内部内容起作用
layout_gravity是该控件在父对象控件中的位置
4、layout_margin 是控件外部的间距
padding是控件内部的间距
FrameLayout中比较重要的有:
FrameLayout is designed to block out an area on the screen to display a single item.
Generally, FrameLayout should be used to hold a single child view, because it can be difficult to organize child views in a way that's scalable to different screen sizes without the children overlapping each other.
You can, however, add multiple children to a FrameLayout and control their position within the FrameLayout by assigning gravity to each child, using the android:layout_gravity
attribute.
RelativeLayout中比较重要的有:
既然是相对的,就要有参照物
1、layout_above 系列:与其他控件的位置关系(以哪个对象为参照物)
2、layout_alignLeft系列:与其他控件的对齐关系
3、layout_alignParentLeft系列:与父控件的对齐关系
TableLayout中比较重要的有:
1、不用指定TableRow的layout_width和Layout_height,默认指定
2、如果TableRow的parent不是TableLayout,则会转为水平的LinearLayout
3、TableLayout属性
CollapseColumns:哪些列缩起
ShrinkColumns:哪些列拉伸(完全按照宽度全部展开)
StretchColumns:哪些列拉伸(分配剩余控件排布,超过长度会自动换行,不会超出屏幕范围)
4、TableRow.LayoutParams属性
android:layout_column :控件放到第几列
android:layout_span:控件横跨几列
Fragment中比较重要的有:
官网查看
<include>其他界面中比较重要的有:
titlebar.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=”match_parent” android:layout_height="wrap_content" android:background="@color/titlebar_bg"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/gafricalogo" /></FrameLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width=”match_parent” android:layout_height=”match_parent” android:background="@color/app_bg" android:gravity="center_horizontal"> <include layout="@layout/titlebar"/> <TextView android:layout_width=”match_parent” android:layout_height="wrap_content" android:text="@string/hello" android:padding="10dp" /> ...</LinearLayout>
- Android高级应用开发(基础篇) - stage6 - 学习笔记(中)
- Android高级应用开发(基础篇) - stage6 - 学习笔记(上)
- Android高级应用开发(基础篇) - stage6 - 学习笔记(下)
- Android高级应用开发(基础篇) - stage1 - 学习笔记
- Android高级应用开发(基础篇) - stage2 - 学习笔记
- Android高级应用开发(基础篇) - stage3 - 学习笔记
- Android高级应用开发(基础篇) - stage4 - 学习笔记
- Android高级应用开发(基础篇) - stage5 - 学习笔记
- Android高级应用开发(基础篇) - stage7 - 学习笔记
- Android高级应用开发(基础篇) - stage8 - 学习笔记
- Android高级应用开发(基础篇) - stage9 - 学习笔记
- Android高级应用开发(基础篇) - stage10 - 学习笔记
- Android高级应用开发(深入篇) stage3(上)- 高级商用界面开发 学习笔记
- Android高级应用开发(深入篇) stage3(下)- 高级商用界面开发 学习笔记
- android入门视频之Android高级应用开发-基础篇
- SAP 高级应用开发 学习笔记
- 《SAP高级应用开发》---Idoc学习笔记
- 《SAP高级应用开发》---Idoc学习笔记
- linux网络协议栈(四)链路层 (5)vlan处理
- Linux C将文本时间转换成系统格式
- Redhat修改IP,网关,DNS,hostname
- 用JavaMail发送邮件的简单例子
- C++模板 typename跟class的区别
- Android高级应用开发(基础篇) - stage6 - 学习笔记(中)
- 关于Android 为从右向左字串拼接 "\u200f"
- 黑马程序员--Callable和Futrue以及衍生的类CompletionService
- 存储系统中热备盘的作用
- cmake 学习笔记
- 博客里面的照片被删除了怎么恢复
- android 电话状态的监听(来电和去电)
- YII 如何在当前页面外部加载css,img,js文件
- 枚举转换字符串