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; } } ~~~
';