Android 布局控制

Android 布局控制

1. 使用XML控制Android的UI界面

XML布局文件保存至res/layout目录下,且文件名要符合Java变量的命名规则。

控制UI界面通常由两步:

  1. 编写XML文件
  2. 在Activity Oncreate()中设置界面:setContentView(R.layout.activity_main);

2. 在Java代码中控制Android的UI界面

可以不通过XML文件,完全通过Java代码来控制。

基本步骤:

  1. 创建布局管理器
  2. 创建组件(View的子类)及设置其属性
  3. 将组件添加到布局管理器(<布局实例>.setView(<组件>)

2.1 举例

package com.mingrisoft;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.FrameLayout;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    public TextView text1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout frameLayout = new FrameLayout(this); 	    // 创建帧布局管理器
        frameLayout.setBackgroundResource(R.mipmap.bg);         //设置背景
        setContentView(frameLayout); 						    // 设置在Activity中显示frameLayout
        text1 = new TextView(this);
        text1.setText("开始游戏");							    //设置显示文字
        text1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); 	// 设置文字大小,单位为SP(缩放像素)
        text1.setTextColor(Color.rgb(17, 85, 114)); 		    // 设置文字的颜色
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);		     //创建保存布局参数的对象
        params.gravity = Gravity.CENTER;					     //设置居中显示
        text1.setLayoutParams(params);						     //设置布局参数
        text1.setOnClickListener(new OnClickListener() {    // 为text1添加单击事件监听器
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(MainActivity.this).setTitle("系统提示") // 设置对话框的标题
                        .setMessage("游戏有风险,进入需谨慎,真的要进入吗?")    // 设置对话框的显示内容
                        .setPositiveButton("确定",                               // 为确定按钮添加单击事件
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        Log.i("桌面台球", "进入游戏");           // 输出消息日志
                                    }
                                }).setNegativeButton("退出",                     // 为取消按钮添加单击事件
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Log.i("桌面台球", "退出游戏");                   // 输出消息日志
                                finish();                                        // 结束游戏
                            }
                        }).show();									             // 显示对话框
            }
        });
        frameLayout.addView(text1);                             // 将text1添加到布局管理器中
    }
}


3. 使用XML和Java代码混合控制UI界面

  • XML文件用以配置简单、变化不大的组件。

  • Java代码用以配置复杂、变化大的组件。

4. 开发自定义的View

自定义的view用来满足丰富的开发需求。

基本步骤:

  1. 编写自定义View类,继承自View
  2. 重写构造方法及onDraw()方法

使用方式:

  1. 在Activity对应的XML布局文件中添加一个FrameLayout,并设置其属性(ID、宽高)
  2. 创建并实例化自定义View
  3. 将自定义View添加到FrameLayout

4.1 举例

一个随跟随手指的兔子

  1. 自定义View

    package mingrisoft.com;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.view.View;
    
    /**
     * Created by lilei on 2016/1/7.
     */
    public class RabbitView extends View {
         	public float bitmapX; 						// 兔子显示位置的X坐标
         	public float bitmapY; 						// 兔子显示位置的Y坐标
         	public RabbitView(Context context) { 			// 重写构造方法
             		super(context);
             		bitmapX = 290; 							// 设置兔子的默认显示位置的X坐标
             		bitmapY = 130; 							// 设置兔子的默认显示位置的Y坐标
             	}
         	@Override
         	protected void onDraw(Canvas canvas) {
             		super.onDraw(canvas);
             		Paint paint = new Paint(); 					// 创建并实例化Paint的对象
             		Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
                            R.mipmap.rabbit); 					// 根据图片生成位图对象
             		canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint); // 绘制小兔子
             		if (bitmap.isRecycled()) { 					// 判断图片是否回收
                 			bitmap.recycle();					// 强制回收图片
                 		}
             	}
         }
    
    
    
  2. 在XML文件中添加FrameLayout

    <?xml version="1.0" encoding="utf-8"?>
         <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:background="@mipmap/background"
             android:id="@+id/mylayout"
             android:paddingBottom="@dimen/activity_vertical_margin"
             android:paddingLeft="@dimen/activity_horizontal_margin"
             android:paddingRight="@dimen/activity_horizontal_margin"
             android:paddingTop="@dimen/activity_vertical_margin"
             tools:context="com.mingrisoft.MainActivity" >
         </FrameLayout>
    
    
  3. 使用自定义View

    package mingrisoft.com;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.FrameLayout;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
             FrameLayout frameLayout=(FrameLayout)findViewById(R.id.mylayout);	// 获取帧布局管理器
             final RabbitView rabbit=new RabbitView(this);			// 创建并实例化RabbitView类
             //为小兔子添加触摸事件监听
             rabbit.setOnTouchListener(new View.OnTouchListener() {
    
                         	@Override
                 	public boolean onTouch(View v, MotionEvent event) {
                     		rabbit.bitmapX=event.getX();			// 设置小兔子显示位置的X坐标
                     		rabbit.bitmapY=event.getY();			// 设置小兔子显示位置的Y坐标
                     		rabbit.invalidate();					//重绘rabbit组件
                     		return true;
                     	}
                 });
             frameLayout.addView(rabbit);							//将rabbit添加到布局管理器中
        }
    
    
    }
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值