Android开发项目实训Day_2

RelativeLayout(相对布局)
相对的前提是要有参照物。

先给要做为参照物的控件起一个id
android:id="@+id/btn1"

在某个控件的右边
android:layout_toRightOf="@id/btn1"
在某个控件的左边
android:layout_toLeftOf="@id/btn1"

在某个控件的下边
android:layout_below="@id/btn1"
在某个控件的下边
android:layout_above="@id/btn1"

在父控件的正中心
android:layout_centerInParent=“true”
在父控件的水平中心
android:layout_centerHorizontal=“true”
在父控件的竖直中心
android:layout_centerVertical=“true”

对齐顶部
android:layout_alignTop="@id/btn1"
对齐底部
android:layout_alignBottom="@id/btn1"
对齐右边
android:layout_alignRight="@id/btn1"
对齐左边
android:layout_alignLeft="@id/btn1"

对齐父控件的右边
android:layout_alignParentRight=“true”
对齐父控件的左边
android:layout_alignParentLeft=“true”
对齐父控件的底边
android:layout_alignParentBottom=“true”
对齐父控件的顶部
android:layout_alignParentTop=“true”

<RelativeLayout 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: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.example.day2_relativelayout.MainActivity" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <!-- 按钮二在按钮一的右边 -->

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/btn1"
        android:text="按钮2" />

    <!-- 按钮三在按钮一的右下方 -->

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn1"
        android:layout_toRightOf="@id/btn1"
        android:text="按钮3" />

    <!-- 按钮四在按钮一的左上方 -->

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/btn1"
        android:layout_toLeftOf="@id/btn1"
        android:text="按钮4" />

    <!-- 按钮五对齐父容器的右边和底边 -->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:text="按钮5" />

</RelativeLayout>

【注意事项】

  1. 改名(文件、变量、类等)的前提必须程序没有错误。
  2. Project – Clean
  3. 文件命名不可以用数字开头

【比例划分】
LinearLayout可以用于比例划分

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.day2_flags.MainActivity" >

    <TextView
        android:layout_width="0dp"
        android:layout_weight="37"
        android:layout_height="match_parent"
        android:background="#0000FF" />
    
    <TextView
        android:layout_width="0dp"
        android:layout_weight="33"
        android:layout_height="match_parent"
        android:background="#FFFFFF" />
    
    <TextView
        android:layout_width="0dp"
        android:layout_weight="35"
        android:layout_height="match_parent"
        android:background="#FF0000" />

</LinearLayout>

【嵌套】
布局可以嵌套,子布局相对父布局而言,也是一个子控件。

竖着排两个国旗分别是法国、德国

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="37"
            android:background="#0000FF" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="33"
            android:background="#FFFFFF" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="35"
            android:background="#FF0000" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#000000" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#FF0000" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#fece00" />
    </LinearLayout>

</LinearLayout>

【常用控件】
一、文本显示控件TextView

设置文字
android:text="@string/hello_world"

设置超链接
android:autoLink=“web”

设置文字大小
android:textColor="#FF0000"

设置文字风格
android:textStyle=“bold|italic”

设置文字的重力方向
android:gravity=“center”

二、按钮Button
https://developer.android.google.cn/docs

Button是TextView的子类,拥有TextView的绝大多数性质。

并且有一些功能上的不同:

  1. 按钮默认样式不同,有点击效果。
  2. 按钮默认的文字居中显示

三、文字输入控件EditText
最大行数
android:maxLines=“1”
最大长度
android:maxLength=“8”
提示
android:hint=“请在此输入密码”

四、图片显示控件ImageView
图片命名不要使用大写英文,不要使用数字开头,不要使用空格等

支持常见格式jpg、png、webp、bmp等
不要使用过大的图片。

五、等待风格的进度条ProgressBar

<LinearLayout 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:orientation="vertical"
    tools:context="com.example.day2_views.MainActivity" >

    <TextView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#000000"
        android:gravity="center"
        android:text="www.baidu.com"
        android:textColor="#FF0000"
        android:textSize="30sp"
        android:textStyle="bold|italic" />

    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="按钮默认有点击效果" />

    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:hint="请在此输入密码"
        android:maxLength="8"
        android:maxLines="1" />

    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/chris" />

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

【单个控件的点击事件】
activity_main.xml

<RelativeLayout 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: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.example.day2_listener1224.MainActivity" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击" />

</RelativeLayout>

MainActivity.java

package com.example.day2_listener1224;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    // 声明Button对象
    private Button mBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 找到Button对象并赋值
        mBtn = (Button) findViewById(R.id.btn1);
        // 设置单击监听器
        mBtn.setOnClickListener(new OnClickListener() {
            // 点击后要触发的方法
            @Override
            public void onClick(View v) {
                // 最简单的弹窗:Toast(吐司,浮动提示)
                // 参数一:上下文
                // 参数二:要显示的内容
                // 参数三:显示时长(长显示或短显示)
                Toast.makeText(MainActivity.this, "您点击了按钮", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

【多控件监听】
activity_main.xml

package com.example.day2_listener;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends Activity implements View.OnClickListener {

    //1.声明控件对象
        private Button mBtn1,mBtn2,mBtn3;

        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //2.通过id找到控件对象
        mBtn1 = (Button) findViewById(R.id.btn1);
        mBtn2 = (Button)findViewById(R.id.btn2);
        mBtn3 = (Button) findViewById(R.id.btn3);

        //3.设置点击事件监听器
        mBtn1.setOnClickListener(this);
        mBtn2.setOnClickListener(this);
        mBtn3.setOnClickListener(this);
    }

    //点击回调
    //参数View v:被点击的控件对象
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn1:
                Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn2:
                Toast.makeText(this, "2", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn3:
                Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

MainActivity.java

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

   <Button
       android:id="@+id/btn1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="按钮1"/>

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2"/>

    <Button
        android:id="@+id/btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮3"/>

</LinearLayout>

【监听器 Listener】
Interface definition for a callback to
be invoked when a view is clicked.

  1. 通过id找到要操作的控件
  2. 调用setOnClickListener方法设置监听器
  3. 使用匿名内部类或实体类实现接口的方式传入参数
  4. 完善回调方法中的业务代码

【打印日志】
类似于System.out.println,Android中提供了日志来在
用户无法察觉的前提下,使开发者能够捕捉到app的调试信息。

捕捉日志:
1.Eclipse
开启Logcat窗口

2.AS
自带Logcat窗口

3.使用命令行(推荐)
过滤特定Log
adb logcat -s MainActivity
清空特定Log
adb logcat -c MainActivity

package com.example.day2_printlog;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.os.Build;

public class MainActivity extends Activity {
	 private Button mBtn;
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn = (Button) findViewById(R.id.btn1);
        mBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //打印调试日志
                //参数一:标签
                //参数二:输出的信息
                Log.d("MainActivity", v.toString());
            }
        });
    }



}

【Dialog】
补充:捕获Log的时候 不要多台设备同时连线(比如连着真机且开着模拟器)
海马玩
http://droid4x.haimawan.com/
https://www.yeshen.com/
http://news.bluestacks.cn/

package com.example.day2_listener1224;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private Button mBtn;
    
    //声明Dialog对象
    private Builder mBuilder;
    private AlertDialog mDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //建造器对象
        mBuilder = new AlertDialog.Builder(this);
        //设置图标
        mBuilder.setIcon(R.drawable.ice_cream);
        //设置标题
        mBuilder.setTitle("吃不吃?");
        //设置显示信息
        mBuilder.setMessage("今天是平安夜,吃不吃冰淇淋?");
        //设置取消按键
        //参数一:按键显示的文字
        //参数二:点击事件监听器(不是View下面常用的那个)
        mBuilder.setNegativeButton("不吃", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "不吃了,天气太冷", Toast.LENGTH_SHORT).show();
                //弹窗消失
                mDialog.dismiss();
            }
        });
        //设置确定按键
        mBuilder.setPositiveButton("吃", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "再冷也要吃!", Toast.LENGTH_SHORT).show();
                //弹窗消失
                mDialog.dismiss();
            }
        });
        //通过建造器对象拿到AlertDialog对象
        mDialog = mBuilder.create();
        
        mBtn = (Button) findViewById(R.id.btn1);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //展示弹窗
                mDialog.show();
            }
        });
    }
}

xml

<RelativeLayout 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: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.example.day2_listener1224.MainActivity" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击弹出Dialog" />

</RelativeLayout>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值