牛骨文教育服务平台(让学习变的简单)

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)改写物理按键——返回的逻辑

(5)

(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;
B. FragmentPagerAdapter   数据源:List;
C. FragmentStatePagerAdapter   数据源:List;
(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;
	}

}