【Android】开发小经验2(待更新)

1. Application类

这部分主要来自 Android中Application类用法。

Application和Activity、Service一样是Android框架的一个系统组件,当Android程序启动时Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,用来存储系统的一些信息。

Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity、Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。

通常我们不需要指定一个Application的,系统会自动帮我们创建,当然也可以创建自己的Application,具体做法下面会说。启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。如果在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。

应用场景

在Android中,可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放掉。

实现步骤

比如,博主想在Application类中获取手机屏幕的尺寸,应用中任何一个Activity都可以通过Application类获得它。这个在博主之前文章 【Android】开发小经验1中第10点提到过,这里以这个为例详细说一下。

1. 继承Application类
主要就是重写onCreate()方法(android.app.Application包的onCreate()才是Android程序真正的入口),初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。博主的例子就是在onCreate()方法里获取屏幕尺寸。
import android.app.Application;
import android.content.Context;
import android.content.ContextWrapper;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import android.widget.TextView;

public class MyApp extends Application
{
	private int width,height;//屏幕尺寸,单位为像素px
	
	@Override
	public void onCreate()
	{
		super.onCreate();
		//获取屏幕尺寸(横屏时)
		ContextWrapper ctx=new ContextWrapper(this);
		WindowManager wm = (WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE);
		Display display = wm.getDefaultDisplay();
		if(display.getWidth()
3. 在任一Activity中获取Application中的变量
只需在任一Activity的onCreate()中执行以下代码,获得Application类,它是代表应用程序的类,使用它可以获得当前应用的主题和资源文件中的内容等,这个类更灵活的一个特性就是可以被继承,来添加我们自己的全局属性。
//获得Application类的实例,以获取全局变量
MyApp app=(MyApp)getApplication();
int width=app.getWidth();
int height=app.getHeight();

2. 在Activity间用Intent传递参数

比如,Activity1要将作者名(是一个字符串)传给Activity2,就在Activity1中如下写。putExtra()方法的第一个参数是key,第二个参数是value,value除了字符串还有很多类型,具体用到的时候自己再查阅。
Intent intent=new Intent();
intent.putExtra("name",author);
intent.setClass(Activity1.this,Activity2.class);
startActivity(intent);
Activity2中要读取Activity1传给它的作者名,读Intent传来的数据是get****Extra()方法,****是什么依传来的数据类型而定。因为作者名是一个字符串,所以用getStringExtra()方法,其他的方法用到时再查阅。
Intent intent=getIntent();
String author=intent.getStringExtra("name");

3. Toast的使用方法

这部分主要来自 android toast几种使用方法。

默认展示

Toast toast=Toast.makeText(getApplicationContext(), "默认的Toast", Toast.LENGTH_SHORT); 
toast.show();//显示Toast信息
或者
Toast.makeText(getApplicationContext(), "默认的Toast", Toast.LENGTH_SHORT).show();
第一个参数——当前的上下文环境,可用getApplicationContext()或this。
第二个参数——要显示的字符串,也可是R.string中字符串ID 。
第三个参数——显示的时间长短,Toast默认的有两个LENGTH_LONG和LENGTH_SHORT,也可以使用毫秒如2000(ms)

自定义显示位置

toast.setGravity(Gravity.TOP|Gravity.CENTER, -50, 100);  
第一个参数——设置toast在屏幕中显示的位置,这里设置的是居中靠顶。
第二个参数——相对于第一个参数设置toast位置的横向X轴的偏移量,正数向右偏移,负数向左偏移。
第三个参数——纵向y轴的偏移量,同第二个参数道理一样 。 如果你设置的偏移量超过了屏幕的范围,toast将在屏幕内靠近超出的那个边界显示

 带图片的

//创建图片视图对象 
ImageView imageView= new ImageView(getApplicationContext()); 
//设置图片 
imageView.setImageResource(R.drawable.ic_launcher); 
//获得toast的布局 
LinearLayout toastView = (LinearLayout) toast.getView(); 
//设置此布局为横向的 
toastView.setOrientation(LinearLayout.HORIZONTAL); 
//将ImageView在加入到此布局中的第一个位置 
toastView.addView(imageView, 0); 
toast.show();

完全自定义显示方式

先写好Toast的xml布局toast.xml,例如:
	android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />



	

	

代码里
public class ToastActivity extends Activity
{
    private Button bt;
    private ImageView image;
    private TextView title, content;

    @Override
    protected void onCreate(Bundle savedInstanceState)
	{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bt = (Button) findViewById(R.id.bt);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showToast();
            }
        });
    }

    private void showToast()
	{
		//获取Toast的布局
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.toast, null);
		//对布局里的组件进行设置
        image = (ImageView) view.findViewById(R.id.image);
        title = (TextView) view.findViewById(R.id.title);
        content = (TextView) view.findViewById(R.id.content);
        image.setBackgroundResource(R.drawable.ic_launcher);
        title.setText("自定义toast");
        content.setText("hello,self toast");
		//显示Toast
        Toast toast = new Toast(getApplicationContext());
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
    }
}

4. android:visibility属性

有3种状态,设置每种状态的XML和Java代码写法如下:
  • 可见(visible)——android:visibility="visible" 和 view.setVisibility(View.VISIBLE);
  • 不可见(invisible)——android:visibility="invisible"和view.setVisibility(View.INVISIBLE);
  • 隐藏(GONE)——ndroid:visibility="gone"和view.setVisibility(View.GONE);
注意!! 当控件visibility属性为INVISIBLE时,依然会占据那部分位置;而控件属性为GONE时,界面则不保留控件所占有的空间。

5. 字体加粗

 在xml文件中使用可以将英文设置成粗体,但是 这种方法不能将中文设置成粗体
android:textStyle="bold" 
将中文设置成粗体,只能通过java代码
TextView tv = (TextView)findViewById(R.id.textView1); 
TextPaint tp = tv.getPaint(); 
tp.setFakeBoldText(true);

6. 设置Tabhost尺寸和字体大小

网上与很多关于如何自定义Tabhost的文章,比如:用图片代替文字、修改背景等等,但是当Tabhost不需要贴图,只想修改一下长宽或者设置字体大小时,可以用下面简单的代码实现,参考 http://www.tuicool.com/articles/Q3aUNj。
TabWidget tabWidget= tabHost.getTabWidget(); 
for (int i =0; i < tabWidget.getChildCount(); i++)
{
	//修改Tabhost尺寸 
	tabWidget.getChildAt(i).getLayoutParams().height = 30;   
	tabWidget.getChildAt(i).getLayoutParams().width = 65;
	//修改字体大小
	TextView tv =(TextView)tabWidget.getChildAt(i).findViewById(android.R.id.title); 
	tv.setTextSize(18);
}
博主实验后发现: 修改Tabhost长度的代码是无效的,修改Tabhoust高度的代码有效。仔细想想,修改Tabhost的长度没有什么意义,如果有别的说法还请告诉博主。

7. 横竖屏切换不重启Activity

给每个Activity加上以下属性,就不会重启Activity。
android:configChanges="keyboardHidden|orientation"
如果横竖屏的界面有2个不同的布局,可以再Activity里重写以下函数。
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE)
    //横向  
    setContentView(R.layout.file_list_landscape);  
else
    //竖向  
    setContentView(R.layout.file_list);









你可能感兴趣的:(Android)