zoukankan      html  css  js  c++  java
  • Android——控制UI界面

    一、使用XML布局文件控制UI界面

    reslayoutactivity_main.xml代码如下:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/FrameLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/background">
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    	android:text="@string/title"
    	style="@style/text"
        >
    </TextView>
    <TextView
        android:id="@+id/startButton"
    	android:layout_gravity="center_vertical|center_horizontal"
    	android:text="@string/start"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	style="@style/text"
        >
        
    </TextView>
    </FrameLayout>
    

    一个TextView组件用于显示提示文字,一个在窗体正中间显示开始游戏按钮

    其中resvaluesstyles.xml代码如下

    <resources xmlns:android="http://schemas.android.com/apk/res/android">
    	<style name="text">
    	    <item name="android:textSize">24dp</item>
    	    <item name="android:textColor">#111111</item>
    	</style>
    </resources>
    

    用于指定应用的样式,指定文字的大小和颜色。

    最后在主活动中也就是MainActivity中,应用一下代码指定应用的布局文件。

    setContentView(R.layout.activity_main);
    

    二、用代码来控制UI界面

    package com.basil_lee.ui;
    
    import android.os.Bundle;
    import android.app.ActionBar.LayoutParams;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.graphics.Color;
    import android.util.TypedValue;
    import android.view.Gravity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.FrameLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		//setContentView(R.layout.activity_main);
    		FrameLayout frameLayout=new FrameLayout(this);//创建帧布局管理器
    		frameLayout.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.background));//设置背景图片
    		setContentView(frameLayout);//设置在Activity中显示frameLayout
    		//创建一个TextView组件
    		TextView text1=new TextView(this);
    		text1.setText("在代码中控制UI界面");
    		text1.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);//设置文字的大小,单位为像素
    		text1.setTextColor(Color.rgb(1, 1, 1));
    		frameLayout.addView(text1);
    		//创建另外一个TextView组件
    		TextView text2=new TextView(this);
    		text2.setText("单击进入游戏。。。。。。");
    		text2.setTextSize(TypedValue.COMPLEX_UNIT_PX,50);//设置文字的大小,单位为像素
    		text2.setTextColor(Color.rgb(1, 1, 1));
    		LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
    				ViewGroup.LayoutParams.WRAP_CONTENT);//创建保存布局参数的对象
    		params.gravity=Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL;
    		text2.setLayoutParams(params);
    		//为text2组件添加单击事件,并将组件添加到布局管理器中
    		text2.setOnClickListener(new OnClickListener() {
    			public void onClick(View arg0) {
    				new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")
    					.setMessage("游戏有风险,进入需谨慎,真的要进入吗?")
    					.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    						public void onClick(DialogInterface arg0, int arg1) {
    							Toast.makeText(MainActivity.this, "进入游戏", Toast.LENGTH_LONG).show();
    						}
    					}).setNegativeButton("退出",new DialogInterface.OnClickListener() {
    						public void onClick(DialogInterface arg0, int arg1) {
    							Toast.makeText(MainActivity.this, "退出游戏", Toast.LENGTH_LONG).show();
    							finish();
    						}
    					}).show();
    			}
    		});
    		
    	   frameLayout.addView(text2);
    	}
    
    }
    

    三、虽然完全通过XML布局文件控制UI界面,实现起来比较方便快捷,但是有失灵活性;而完全通过Java代码控制UI界面,虽然比较灵活,但是开发过程比较繁琐。因此常常两者结合。

    首先是界面布局代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/background"
           android:id="@+id/mylayout">
    
    </LinearLayout>

    然后Java代码如下:

        setContentView(R.layout.test);
            LinearLayout linearLayout=(LinearLayout)findViewById(R.id.mylayout);
            for(int i=0;i<imgPath.length;i++){
                img[i]=new ImageView(this);//创建一个ImageView组件
                img[i].setImageResource(imgPath[i]);
                img[i].setPadding(5, 5, 5, 5);//设置ImageView组件的内边距
                LayoutParams params=new LayoutParams(153,148);//设置组件的宽度和高度
                img[i].setLayoutParams(params);//为ImageView组件设置布局参数
                linearLayout.addView(img[i]);//将ImageView组件添加到布局管理器中
            }

    以上代码在窗体中横向并列的显示4张图片

    四、除了以上三种我们还可以开发自定义的View

    开发自定义的View组件大致分为以下三个步骤:

    • 创建一个继承android.view.View类的View类,并且重写构造方法
    • 根据需要重写相应的方法。
    • 在项目中创建并实例化自定义的View类,并将其添加到布局管理器中。

    下面是类似飞机大战中的一个例子:

    class MyView extends View{
    	
    	public float bitMapX;
    	public float bitMapY;
    	public MyView(Context context) {
    		super(context);
    		bitMapX=750;
    		bitMapY=750;
    	}
    	@Override
    	protected void onDraw(Canvas canvas) {
    		// TODO Auto-generated method stub
    		super.onDraw(canvas);
    		Paint paint=new Paint();
    		Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.air1);
    		canvas.drawBitmap(bitmap, bitMapX,bitMapY,paint);
    		if(bitmap.isRecycled()){
    			bitmap.recycle();
    		}
    	}
    }
    

      

    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.test2);
    		FrameLayout frameLayout=(FrameLayout)findViewById(R.id.mylayout);
    		final MyView air=new MyView(getApplicationContext());
    		air.setOnTouchListener(new OnTouchListener() {
    			
    			@Override
    			public boolean onTouch(View arg0, MotionEvent arg1) {
    				air.bitMapX=arg1.getX();
    				air.bitMapY=arg1.getY();
    				air.invalidate();
    				return true;
    			}
    		});
    		frameLayout.addView(air);
    

    这样就可以使飞机那种图片跟随者手指去移动了。

    以上就是三种UI的控制方法。

  • 相关阅读:
    NOIP2009-2018简要题解
    luogu P5023 填数游戏
    Java桌面精灵基础——swing类的使用与关键代码
    c信号处理程序以及setjmp函数longjmp函数的简单应用
    mmapcopy函数的编写
    nm命令的学习以及可执行文件中的段
    关于C中数组和指针的一点理解
    写一个简单的lisp解释器(1)
    House Robber
    SICP_3.31
  • 原文地址:https://www.cnblogs.com/BasilLee/p/4084214.html
Copyright © 2011-2022 走看看