Android入门学习笔记(2)UI布局

2020-01-10 17:29:31 浏览数 (1)

Android UI布局

View(视域):

View类位于android.view包(android.view.View)中,View类的子类位于android.widget[译:小器物](android.widget.TextView)包中

View类常用属性

android:id:@ id/xxx (@与@ 的区别https://blog.csdn.net/strange_monkey/article/details/80844814)

android:background

android:padding 内边距(上下左右一样)

android:paddingLeft android:paddingTop android:paddingRight android:paddingBottom

android:paddingStart(同Left) android:paddingEnd(同Right)

ViewGroup(视域组):

继承自View类

ViewGroup.LayoutParams类:

android:layout_height,android:layout_width

属性:FILL_PARENT,MATCH_PARENT,WRAP_CONTENT

资料引用:https://www.cnblogs.com/nikyxxx/archive/2012/06/15/2551390.html

三个属性都用来适应视图的水平或垂直大小,一个以视图的内容或尺寸为基础的布局比精确地指定视图范围更加方便。

1)fill_parent

设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。

2) wrap_content

设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。以TextView和ImageView控件为例,设置为wrap_content将完整显示其内部的文本和图像。布局元素将根据内容更改大小。设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。

3)match_parent    Android2.2中match_parent和fill_parent是一个意思 .两个参数意思一样,match_parent更贴切,于是从2.2开始两个词都可以用。那么如果考虑低版本的使用情况你就需要用fill_parent了

ViewGroup.MarginLayoutParams类:

Android UI组件的层次结构

UI界面的控制

1.在XML布局文件中控制UI界面

2.在java代码中控制UI界面

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

4.开发自定义的View

代码控制UI的页面实例:

代码语言:javascript复制
package com.example.myapplication;

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

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //先创建布局管理器
        FrameLayout frameLayout = new FrameLayout(this);
        frameLayout.setBackgroundColor(Color.BLACK);
        setContentView(frameLayout);
        TextView textView = new TextView(this);
        textView.setText("开始游戏");
        textView.setTextColor(Color.WHITE);
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,50);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        params.gravity= Gravity.CENTER; //用来控制控件在包含它的父控件的位置
        textView.setLayoutParams(params);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(MainActivity.this).setTitle("系统提示").setMessage("快点莱Van♂").setPositiveButton("yes sir",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Log.i("游戏","开始游戏");
                            }
                        }).setNegativeButton("no!sir",new DialogInterface.OnClickListener(){
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Log.i("游戏","退出游戏");
                                finish();
                            }
                }).show();
            }
        });
        frameLayout.addView(textView);
    }
}

Theme(主题)

manifests/AndroidManifest.xmlmanifests/AndroidManifest.xml

一开始建立项目的时候有主题选择的选项,对应manifest的这一段

res的style.xml中可以调节主题的一些选项

res/styles.xmlres/styles.xml

红色框框中的内容可以选择主题,更改主题栏的内容,如上的主题就是有主题栏并且文字为AndroidManifest.xml中android.label的内容。

以下是主题的各个元素的详解(图片和内容引用自https://www.cnblogs.com/weizhxa/p/9982470.html)

<!--状态栏颜色--> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

<!--控制各个控件被选中时的颜色--> <item name="colorAccent">@color/colorAccent</item>

<!--页面背景色--> <item name="android:windowBackground">@color/windowBackg</item>

<!--底部导航栏颜色--> <item name="android:navigationBarColor">@color/navigationColor</item>

<!--Appbar背景色--> <item name="android:colorPrimary">@color/colorPrimary</item>

<!--ToolBar上的Title颜色--> <item name="android:textColorPrimary">@color/textColorPrimary</item>

<!--各个控制控件的默认颜色--> <item name="android:colorControlNormal">@color/colorControlNormal</item>

statusBarColor和colorPrimaryDark的区别(引用自https://blog.csdn.net/sinat_41374125/article/details/90112205)

相同点

  • 都能修改statusBar的颜色
  • Android 5.0以上才支持

不同点

  • statusBarColor具有更高的优先级
  • statusBarColor在Android 5.0以下的版本中会发出提示警告
  • 在默认情况下,statusBarColor的值继承自colorPrimaryDark

0 人点赞