UI

作者: 夜雨聲煩_ | 来源:发表于2018-11-21 14:21 被阅读0次

Activity

类似于Controller,同一时间只能展示给用户一个。

onCreate()

activity运行时被调用,应在此方法中初始化UI,加载资源文件等。

TextView

  • 在代码中创建:
    onCreate()中加入如下代码:
    TextView tv = new TextView(this);
    tv.setText("你好");
    setContentView(tv);
    
  • xml中创建:
    <TextView
      //指定该控件id
      android:id="@+id/tv"
      //匹配父控件
      android:layout_width="match_parent"
      //适应内容
      android:layout_height="wrap_content"
      //设置字体大小
      android:textSize="20sp"
      //设置字体颜色
      android:textColor="#00ff00"
      android:text="您好"/>
    
  • 关联
    使用findViewByIdxml中控件与activity关联
    TextView tv = (TextView) findViewById(R.id.tv);
    tv.setText(Html.fromHtml("欢迎物品<font color=blue>为建</font>瓯市五角枫就怕"));
    
    通过find方法传入关联id,获取返回值view,转换为view具体子类textview,再赋予局部变量tv。接下来就可以在activity中对tv进行操作。
    利用formHtml方法,可以解析带有html语言格式的字符串,做到是字符串中间变色。
    改变字体颜色的另一种方法SpannableStringBuilder,类似于NSAttributeString
    String str = "欢迎的违法身份无法的说法三等分";
    SpannableStringBuilder style = new SpannableStringBuilder(str);
    style.setSpan(new ForegroundColorSpan(Color.RED),   0,6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    style.setSpan(new ForegroundColorSpan(Color.GREEN),   6,15,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    tv.setText(style);
    
  • 超链接
    使用autoLink设置webphone等设置超链接。

EditText

类似于textField

常用属性
  • maxlength 限制输入字符数
  • singleLine 是否单行
  • inputType 限制输入类型
  • hint place holder
  • drawableLeft 编辑框左侧图片,同理还有上下左右。图片导入为放进mipmap文件夹,使用@mipmap/picName引用
  • background 背景。可以通过在drawable中添加shape.xml文件,写入圆角代码,使用@drawable/shape调用实现圆角。

DDMS

控制模拟器发送短信,电话等。
同时可以向模拟器中app中添加文件,下载文件,删除文件等。(新版已移除)

Button

添加点击事件。
使用setOnClickListener,传入参数实现onClick方法接口

方法一:直接闭包
button = findViewById(R.id.button);
//参数为一个接口
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.v("color","dianji");
        Toast.makeText(MainActivity.this,"点击按钮",2).show();
    }
});
方法二:声明变量
button.setOnClickListener(listener);
private View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //强转button类型
        Button btn = (Button)v;
        //switch根据buttonId筛选多个按钮
        switch (btn.getId()){
            case R.id.button:
                Log.v("button","按钮1");
                break;
            default:
                Log.v("button","按钮2");
                break;
        }
    }
};

使用Log.v等方式打印;使用Toast.makeText进行toast提示。

Intent

调用系统方法

使用intent表示意图,实现打电话发短信等。注意要在AndroidManifest设置相应权限。

public void onClick(View v) {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:137343"));
    startActivity(intent);
}
进入新页面及传值

使用intent进入其他页面以及传值。

Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
intent.putExtra("str", "main activity data");
startActivity(intent);

使用intent.put(serializable)传递对象

反向传值

A类中:

public final static int REQUEST_CODE = 1;

Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
intent.putExtra("str", "main activity data");
startActivityForResult(intent,REQUEST_CODE);

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (requestCode == requestCode && resultCode == SecondActivity.RESULT_CODE){
        Bundle bundle = data.getExtras();
        String string = bundle.getString("back");
        mainBtn.setText(string);
    }
}

B类中:

public final static int RESULT_CODE = 1;

private View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.putExtra("back","back data");
        setResult(RESULT_CODE,intent);
        finish();
    }
};

当有多个按钮返回的时候,可以有多个宏定义来进行区别判断。
public final static int RESULT_FIRST_BUTTON = 1;
public final static int RESULT_SECOND_BUTTON = 2;

Activity生命周期

image.png

退出会执行onDestroy,切换到后台不会。

  • onCreat 布局,调用数据库获取数据,数据绑定等。
  • onPause 不能执行耗时操作,会影响下一个界面进入。可以数据持久化,不在后面方法避免被系统终止。

保存Activity状态

onSaveInstanceState中保存。在onPause方法之前。

public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
    outPersistentState.putString(CONTENT,editText.getText().toString());
}

onCreate中读取。

if (savedInstanceState != null && savedInstanceState.containsKey(CONTENT)){
    String str = savedInstanceState.getString(CONTENT);
    editText.setText(str);
}

Theme

manifests中使用theme设置titile bar等各种属性。

布局

LinearLayout:线性布局
  • linearLayout 一个linearLayout为一个竖向线性行。
  • gravity 子控件或内部内容对齐方式。
  • layout_weight 多个控件指定正整数来比例分配总空间。
AboluteLayout:绝对布局

设置layout_xlayout_y设置控件位置。相对较为死板,不推荐。

FrameLayout:框架布局

通过框架视图层叠的方式来进行布局。

  • layout_gtavity此视图相对于父子图的对齐方式。
RelativeLayout:相对布局

类似于约束,相对位置布局。

  • layout_left 等属性指定与另一控件位置关系,如左侧相邻。
  • layout_alignParentRight 等属性指定与其父视图位置关系,如父视图最左侧。
  • layout_alignLeft 等属性指定与另一个控件的对齐方式,如左对齐。
  • center_... 等为居中方式。
  • padding 表示中间间隔。
  • marginLeft 等表示边缘距离。

相关文章

网友评论

      本文标题:UI

      本文链接:https://www.haomeiwen.com/subject/jhuqqqtx.html