Android重要控件概览(中)
最后更新于:2022-04-01 14:27:14
### 1、ProgressBar
(1)属性:
android:max="100" ; ——最大显示进度
android:progress="50" ; ——第一显示进度
android:secondaryProgress="80" ; ——第二显示进度
android:indeterminate="true" ; ——设置是否精确显示(true表示不精确显示)
(2)方法:
setProgress(int) ; ——设置第一进度
setSecondaryProgress(int) ; ——设置第二进度
getProgress( ) ; ——获取第一进度
getSecondaryProgress( ) ; ——获取第二进度
incrementProgressBy( int ) ; ——增加或者减少第一进度
incrementSecondaryProgressBy (int ) ; ——增加或者减少第二进度
getMax( ) :获取最大进度
(3)在标题栏上上设置
~~~
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//启用窗口特征,启用带进度和不带进度的进度条
requestWindowFeature(Window.FEATURE_PROGRESS);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_main);
//显示两种进度条
setProgressBarVisibility(true);
setProgressBarIndeterminateVisibility(true);
//MAX=10000
setProgress(6000);
}
~~~
(4)对话框式进度条
~~~
btnDia=(Button) findViewById(R.id.btnDia);
btnDia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*设置页面显示风格*/
//新建ProgressDialog对象
progressDialog=new ProgressDialog(MainActivity.this);
//设置显示风格(横向)
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置标题
progressDialog.setTitle("对话框式进度条");
//设置图标
progressDialog.setIcon(R.drawable.ic_launcher);
//设置对话框里的文字信息
progressDialog.setMessage("欢迎你!");
//设置"确定"按钮
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE,"确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "这是对话框式进度条!", Toast.LENGTH_LONG).show();
}
});
//设置是否通过返回按钮退出对话框
progressDialog.setCancelable(true);
/*设置关于ProgressBar的属性*/
//设置最大进度
progressDialog.setMax(100);
//设置初始化已经增长到的进度
progressDialog.incrementProgressBy(20);
//进度条是明确显示进度的
progressDialog.setIndeterminate(false);
//显示对话框
progressDialog.show();
}
});
~~~
(5)自定义ProgressBar
~~~
style="@android:style/Widget.ProgressBar.Horizontal" //Ctrl+左键 查看
<style name="Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
<item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
<item name="android:minHeight">20dip</item>
<item name="android:maxHeight">20dip</item>
<item name="android:mirrorForRtl">true</item>
</style>
//继续查看@android:drawable
~~~
新建一个自己的progress_horizontal.xml文件,去覆盖系统的。(复制原来的,在原来的基础上进行修改)然后在ProgressBar属性中添加:
~~~
android:progressDrawable="@drawable/progress_horizontal"
~~~
### 2、WebView显示网页
(引言:可以通过Intent调用系统浏览器,直接实现跳转)
(1)权限: <uses-permission android:name="android.permission.INTERNET"/>
(2)加载:A.本地文件:webView.loadUrl( "file:///android_asset/example.html") //本地文件存放在assets目录下
B.加载Web资源:webView.loadUrl("http://www.baidu.com")
C.覆盖WebView默认通过第三方或者系统浏览器打开网页的行为,使得网页可以在WebView中打开
~~~
webView.setWebViewClient(new WebViewClient(){ //WebViewClient帮助WebView去处理一些页面控制和请求通知
......
return true
......
});
~~~
D.获得当前WebView的URL:webView.getUrl( );
(3)在WebView中使用Javascript
~~~
WebSettings webSettings = webView.getSettings(); //获取WebSettings的值
webSettings.setJavaScriptEnabled(true); //启用JavaScript
~~~
(4)改写物理按键——返回的逻辑
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-06_5704ccec0c6c4.jpg)
(5)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-06_5704ccec2b984.jpg)
(6)WebView缓存的运用
A.优先使用缓存:webView.getSettings( ).setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
B. 不使用缓存 :webView.getSettings( ).setCacheMode(WebSettings.LOAD_NO_CACHE);
### 3、Fragment——主要目的是用在大屏幕设备上,支持更加动态和灵活的UI设计。
Fragment在应用中应当是一个模块化和可重用的组件,因为Fragment定义了自己的布局,以及通过使用它自己的生命周期回调方法定义了它自己的行为,所以可以将Fragment包含到多个Activity中。
(1)Fragment可以作为Activity界面的一部分组成出现;可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity中使用;在Activity运行过程中,可以添加、移除或者替换Fragment;Fragment可以相应自己的输入事件,并且有自己的声明周期,它们的生命周期会受宿主Activity的生命周期的影响。
(2)静态加载——在Activity的Layout文件中声明Fragment
A.android:name属性:指定了在layout中实例化的Fragment类
B.android:id属性:提供了一个唯一ID 来标识
C.android:tag属性:提供了一个唯一的字符串 来标识
(3)动态加载——撰写代码将Fragment添加到一个Activity
layout中(处理Fragment事务)
A.开启事务:FragmentManager fragmentManager =
getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
B.执行的操作:add(); remove(); replace(); addToBackStack(); commit();
(4)声明周期:
A. onCreateView:每次创建都会绘制Fragment的View组件时回调该方法
B. onAttach:当Fragment被添加到Activity时候会回调这个方法,并且只调用一次
C. onCreate:创建Fragment时会回调,只会调用一次
D. onActivityCreated:当Fragment所在的Activty启动完成后调用
E. onStart:启动Fragment
F. onResume:恢复Fragment时会被回调,调用onStart()方法后面一定会调用onResume()方法
G. onPause:暂停Fragment
H. onStop:停止Fragment
I. onDestroyView:销毁Fragment所包含的View组件时
J. onDestroy:销毁Fragment时会被回调
K. onDetach:Fragment从Activity中删除时会回调该方法,并且这个方法只会调用一次
(5)与Activity传值通信:
A. Fragment调用getActivity()方法获取它所在的Activity;
Activity调用FragmentManager的findFragmentById()或者findFragmentByTag()方法获取Fragment;
B. Activity——》Fragment:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法;
Fragment——》Activity:需要在Fragment中定义一个内部回调接口,让包含该Fragment的Activity实现该回调接口。这样Fragment可调用回调方法将数据传递给Activity。
### 4、ViewPager使视图左右滑动(类似微信界面)
(1)加载显示的页卡:
A. layoutInflater if = getLayoutInflater().from(this);
if.inflate(resource,root);
B. View.inflate(context,resource,root);
(2)配置Adapter:
A. PagerAdapter 数据源:List<View>;
B. FragmentPagerAdapter 数据源:List<Fragment>;
C. FragmentStatePagerAdapter 数据源:List<Fragment>;
(3)监听器
OnPageChangeListener
简单粘一下实现代码:
~~~
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/pagerTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top" >
</android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
~~~
数据适配器:
~~~
public class MyPagerAdapter extends PagerAdapter {
private List<View> viewList;
private List<String> titleList;
public MyPagerAdapter(List<View> viewList, List<String> titleList) {
this.viewList = viewList;
this.titleList = titleList;
}
// 返回的是页卡的数量
@Override
public int getCount() {
// TODO Auto-generated method stub
return viewList.size();
}
// View是否来自与对象
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
// 实例化一个页卡
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
return viewList.get(position);
}
// 销毁页卡
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
//设置ViewPager页卡的标题
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}
}
~~~
MainActivity :
~~~
public class MainActivity extends Activity {
private List<View> viewList;
private ViewPager viewPager;
private List<String> titleList;
private PagerTabStrip tabStrip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewList=new ArrayList<View>();
//通过View对象作为ViewPager的数据源
View view1=View.inflate(this, R.layout.view1, null);
View view2=View.inflate(this, R.layout.view2, null);
View view3=View.inflate(this, R.layout.view3, null);
View view4=View.inflate(this, R.layout.view4, null);
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
viewList.add(view4);
//初始化ViewPager
viewPager=(ViewPager) findViewById(R.id.pager);
//为ViewPager设置标题
titleList=new ArrayList<String>();
titleList.add("第一页");
titleList.add("第二页");
titleList.add("第三页");
titleList.add("第四页");
//为PagerTabStrip设置一些属性
tabStrip=(PagerTabStrip) findViewById(R.id.pagerTab);
tabStrip.setBackgroundColor(Color.BLUE);
tabStrip.setTextColor(Color.RED);
tabStrip.setDrawFullUnderline(false);
tabStrip.setTabIndicatorColor(Color.GREEN);
//创建PagerAdapter的适配器
MyPagerAdapter adapter=new MyPagerAdapter(viewList,titleList);
//ViewPager加载适配器
viewPager.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
~~~