您的位置:首页 > 移动开发 > Android开发

android 常用控件

2013-01-09 22:04 267 查看
1.文本控件 TextView

跑马灯效果:系统提供的textView文本虽然自带跑马灯效果但是只有获取到焦点的时候才能实现效果,

所以需要重写TextView类的isFocused()方法使它永远返回true

public class ScrollForeverTextView extends TextView {

public ScrollForeverTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

public ScrollForeverTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public ScrollForeverTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public boolean isFocused() {
return true;//关键是这个方法
}

}
加入xml中的代码 ScrollForeverTextView前面的是这个类所在的包名

<com.quickeasytrip.view.ScrollForeverTextView
android:id="@+id/book_hotel_name_verify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
/>


2.EditView 编辑框

刚打开Activity的时候,很可能由于布局中含有一个EditView控件而自动弹出一个输入法,要想去掉这个讨厌的输入法框只要在EditView的父布局中加入一个属性即可

解决之道:在EditText的父级控件中找一个,设置
android:focusable="true"
android:focusableInTouchMode="true"
这样,就把EditText默认的行为截断了!
点编辑框输入用户名密码时,最经常遇到的问题就是,输入法把编辑框遮挡,如果想编辑下一个EditView就必须关闭输入法,

UI布局也与输入法分离,同时EditText区域自动缩小了。这样的话,即不影响用户输入,也不影响用户进一步操作!

而且即使打开了输入法,用户也可以看到UI全貌,感觉比较舒服、友好

此时只要在AndroidManifest.xml文件 这个activity中加入这个属性就可以

android:windowSoftInputMode="adjustResize"

如果登录名称是email类型,为方便用户,设置android:inputType属性就可以直接让弹出的输入法适应输入邮件格式

android:inputType="textEmailAddress"适合输入邮件
android:inputType="number"适合输入数字


3.ViewPage

使用这个控件需要先添加这个包,你的工程---->右键 android tools -------->addSupportLibrary 添加jar包

第一步 在xml里添加控件

<android.support.v4.view.ViewPager
android:id="@+id/pagerMain"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/advert" />


第二步 继承PagerAdapter 之后ViewPager添加 这个Adapter即可

public class MyPagerAdapter extends PagerAdapter {

public List<View> mListViews = null;

ViewPager mViewPager = null;

public MyPagerAdapter(List<View> mListViews, ViewPager viewPager) {
this.mViewPager = viewPager;
this.mListViews = mListViews;
}

@Override
public int getCount() {
return mListViews.size();
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == (arg1);
}

@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(mListViews.get(position));
return mListViews.get(position);
}

@Override
public void destroyItem(View container, int position, Object object) {
if (mListViews.size() > 0) {
if ((mListViews.size() - 1) >= position) {
mViewPager.removeView(mListViews.get(position));
}//经过实际测试,这个方法经常会报下标越界错误,这样写能有效避免类似错误
}
}

}


4.提示框Dialog

所有的提示类悬浮框都继承自这个类Dialog。最常用的两种提示框一个是AlertDialog,另一个是ProgresDialog,前者能和用户交互接受用户的操作,后者提示用户 有 一个费时的操作正在进行,请用户耐心等待

因为自己的应用程序很难和系统的主题相匹配,所以通常都会自己写这两类提示框。下面给出一个自定义ProgresDialog例子

View pdView = factory.inflate(R.layout.pd_view, null);
Dialog mProgressDialog = new Dialog(this, R.style.nobgDialog);
mProgressDialog.setContentView(pdView);  //最后执行show方法显示提示框mProgressDialog.show();


pd_view的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:background="@drawable/pd_bg"
android:gravity="center"
android:orientation="horizontal" >

<ProgressBar
android:id="@+id/loading_process"
android:layout_width="34dip"
android:layout_height="34dip"
android:indeterminate="false"
android:indeterminateDrawable="@anim/frame_animation" />

<TextView
android:id="@+id/mPdText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:text="请稍后..."
android:textColor="@android:color/black"
android:textSize="14dip"
android:textStyle="bold" />

</LinearLayout>
动画列表代码,当达到八帧每帧100毫秒的时候转动效果最流畅

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >
<item android:drawable="@drawable/scan_01" android:duration="100"/>
<item android:drawable="@drawable/scan_02" android:duration="100" />
<item android:drawable="@drawable/scan_03" android:duration="100" />
<item android:drawable="@drawable/scan_04" android:duration="100" />
<item android:drawable="@drawable/scan_05" android:duration="100" />
<item android:drawable="@drawable/scan_06" android:duration="100" />
<item android:drawable="@drawable/scan_07" android:duration="100" />
<item android:drawable="@drawable/scan_08" android:duration="100" />
</animation-list>


activity提供了一个方法专门管理所有的提示框

@Override
protected Dialog onCreateDialog(int id, Bundle args) {
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("等待狂");
return dialog;
}
调用showDialog(id);来显示具体的提示框,编程时dialog.show() 也能显示,好像这个方法是没用的,事实上,当你按back键返回操作时

前者会消除提示框,后者则不会有反应,需要自己重写onKeyDown()方法来消除提示框

5 ContextMenu 上下文菜单

第一步 覆写activity onCreateContextMenu()方法

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
// set context menu title
menu.setHeaderTitle("文件操作");
// add context menu item
menu.add(0, 1, Menu.NONE, "发送");
menu.add(0, 2, Menu.NONE, "标记为重要");
menu.add(0, 3, Menu.NONE, "重命名");
menu.add(0, 4, Menu.NONE, "删除");
super.onCreateContextMenu(menu, v, menuInfo);
}


第二步 给上下文菜单注册一个VIew,当长按View的时候弹出菜单

registerForContextMenu(View);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: