Android基础知识回顾2

属性设置

text

如果在textView标签里面直接设置text的话,系统会提醒你把字符串专门放到res/value里面来进行管理

大小单位

  • px是像素的意思,手机屏幕的最小显示单位,它与显示屏有关,一般来说,同样尺寸的屏幕。如果看起来越来越清晰,就表示像素魔都越高,px计量的分辨率越大
  • dp是和显示设备无关的单位,只和屏幕的尺寸有关,一般同样尺寸的分辨率是相同的。
  • sp是用来专门设置大小的,手机在系统中可以调整字体的大小,如果设置的是普通字体,用dp设置的文字没有变化,sp设置的文字就变大了。

 文本颜色

如果在java代码逻辑中设置颜色的话,可以设置Color类里面的12种颜色

但是如果是在xml里面,xml是解析不了Color类的,我们把Color类交给了透明度和RGB三原色来联合定义,组成一个八位的编码,这个八位编码是十六进制数,比如FFHHBBAA,FF表示透明度,HH表示红色的浓度,BB表示绿色的浓度,AA表示蓝色的浓度。前两位中FF代表的是全不透明,00代表的是全透明

设置视图的宽高

在xml中设置试图有三种形式

  1. wrap_content 表示自适应宽高,如果字很少则所占有的地方也很少
  2. match_parent和上级试图保持一致
  3. 直接设置宽或者高为多少dp

如果是在java代码中设置宽高的形式就比较的复杂

TextView tv_hello = this.findViewById(R.id.tv_hello);//1.获取布局控件
ViewGroup.LayoutParams params = tv_hello.getLayoutParams();//2.调用控件的获取布局参数的对象params.width = 300;//3.将对象进行修改
tv_hello.setLayoutParams(params);//4.将布局参数对象重新设置给布局控件

设置视图的间距

视图之间的宽高用的是layout_margin

视图内部设置间距用的是padding

为什么视图的内部可以容的下其他的视图?

原因是很多的layout都是viewGroup的基类,而viewGroup又是View的子类,所以ViewGroup有组装特性,所以就可以嵌套。

活动设置

活动开启和关闭

打开某个界面就叫启动活动,关闭某个界面就叫做结束某个活动,所以如果需要启动某个活动,就可以用

startActivity(本活动.this,目标活动.class)

结束某个活动可以用

finish()

活动的生命周期

onCreate:页面加载到内存

onstart:页面显示到用户屏幕

onResume:页面恢复,页面进入活跃状态,允许用户和活动进行交互

onPause:停止活动与用户进行交互

onStop:页面不显示到用户界面

onDestroy:页面从内存删除

活动的启动模式

Android给每个运行的app都分配了活动栈,第一个活动会跳转到第二个活动,返回则会调到第一个活动,如果活动入栈的顺序是A B C,那么他们出栈的顺序就是C B A

如果一个Activity已经过时,如果启动模式是singletask,singleInstance,singleTop的话那么在启动或者回到这个活动的时候不会创建新的活动实例,也就是不会去调用onCreate方法,而是调用onNewIntent方法。这就是启动模式设置的奇妙的地方,这可以帮助我们减少内存的无用消耗。

有两种方式可以设置活动的启动模式

xml:直接在AndroidManifest里面对注册的activity设置launchmode

Java:在intent中设置launchMode,使用intent对象的setFlag方法

// 创建一个意图对象,准备跳到指定的活动页面
Intent intent = new Intent(this, JumpSecondActivity.class);
// 当栈中存在待跳转的活动实例时,则重新创建该活动的实例,并清除原实例上方的所有实例 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  // 设置启动标志 
startActivity(intent);  // 跳转到意图对象指定的活动页面
当然活动B内部的跳转代码也要设置同样的启动标志:

   
原文链接:https://blog.csdn.net/weixin_43895667/article/details/125883020

singleTop:如果栈顶是目标activity,就不会新建activity,适合渠道多,多应用开启的activity

singleTask:如果栈中存在目标activity,把其之上的activity清除,目标activity获得焦点。

singleInstance:新建一个task栈来存放目标activity,并让这个activity获得焦点

以上是在xml中设置启动模式的三种常用模式,也可以通过设置Java代码逻辑来启动java

页面之间发送数据

Intent对象的setData方法是指定到达目标的路径,真正的参数信息是存放在了extra是中,intent重载了许多的putExtras方法,但是显然purExtra的方法不好管理,像送快递一样大小包裹随便扔是不行的,不仅找起来很不方便,丢了也不知道,所以引入了bundle的概念,可以理解为他是超市的存包柜或者快递收件柜,大小包裹bundle都统一存取,方便安全。

Bundle是用Map来实现的,可以添加或者删除元素,还可以判断元素是否存在,开发者如果要把bundle数据全部打包好,只需要调用putExtras方法,如果把Bundle全部取出,也只需要调用一次意图对象的getEtras方法。

存元素:

// 创建一个意图对象,准备跳到指定的活动页面
Intent intent = new Intent(this,ActReceiveActivity.class); 
Bundle bundle = new Bundle();  // 创建一个新包裹
// 往包裹存入名为request_time的字符串
bundle.putString("request_time", DateUtil.getNowTime()); 
// 往包裹存入名为request_content的字符串
bundle.putString("request_content", tv_send.getText().toString()); 
intent.putExtras(bundle);  // 把快递包裹塞给意图
startActivity(intent);  // 跳转到意图指定的活动页面
————————————————
原文链接:https://blog.csdn.net/weixin_43895667/article/details/125883020

取元素:

//从布局文件中获取名为tv_receive的文本视图
TextView tv_receive = findViewById(R.id.tv_receive); 
// 从上一个页面传来的意图中获取快递包裹
Bundle bundle = getIntent().getExtras(); 
// 从包裹中取出名为request_time的字符串
String request_time = bundle.getString("request_time"); 
// 从包裹中取出名为request_content的字符串
String request_content = bundle.getString("request_content"); 
String desc = String.format("收到请求消息:\n请求时间为%s\n请求内容为%s", 
                           request_time, request_content);
tv_receive.setText(desc);  // 把请求消息的详情显示在文本视图上
                     
原文链接:https://blog.csdn.net/weixin_43895667/article/details/125883020

为活动添加附加信息

1.把字符串参数放到字符串资源文件中,待App运行的时候再从资源文件读取字符串的值。

首先把字符串放在res/resources的string.xml中

<string name="weather_str">晴天</string>

接着用Java逻辑去获取字符串资源,然后让其在控件中显示

// 显示字符串资源
private void showStringResource() {
   String value = getString(R.string.weather_str); // 从strings.xml获取名叫weather_str的字符串值a
   tv_resource.setText("来自字符串资源:今天的天气是"+value); // 在文本视图上显示文字 
}

2.资源文件中配置字符串是全部的活动共享的,如果不想要全部活动共享数据就需要用到metaData(元数据),它描述固定活动的参数信息,由某个特定活动所有。

首先打开Androidmanifest.xml在活动节点加入metadata节点,通过name指定元数据名称,通过属性value可以指定元数据的值。

<activity android:name=".MetaDataActivity">
   <meta-data android:name="weather" android:value="晴天" /> 
</activity>
元数据的value属性既可直接填字符串,也可引用strings.xml已定义的字符串资源,引用格式形如

“@string/字符串的资源名称”。下面便是采取引用方式的activity节点配置:

<activity android:name=".MetaDataActivity"> 
   <meta-data
              android:name="weather"
              android:value="@string/weather_str" /> 
</activity>

配置好了xml,接下来需要配置java逻辑,我们的信息都变成了Bundle,这个Bundle存储在ActivityInfo中,这些ActivityInfo由包管理器(PackageManager)管理

  1. 获取应用的包管理器
  2. 调用包管理器的getActivityInfo方法获取活动信息对象
  3. 活动信息对象的metaData是Bundle形,在Bundle中根据想要的数据类型进行键值对的查找即可
// 显示配置的元数据
private void showMetaData() { 
   try {
       PackageManager pm = getPackageManager(); // 获取应用包管理器 
       // 从应用包管理器中获取当前的活动信息
       ActivityInfo act = pm.getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
       Bundle bundle = act.metaData; // 获取活动附加的元数据信息
       String value = bundle.getString("weather"); // 从包裹中取出名叫weather的字符串
       tv_meta.setText("来自元数据信息:今天的天气是"+value); // 在文本视图上显示文字 
  } catch (Exception e) {
       e.printStackTrace(); 
 }
}

给页面注册快捷方式

 如果想要实现类似于支付宝长按图标就能快速跳转到某一个界面的功能的话,需要用到刚刚说的metaData

首先我们先把物品们需要的菜单项的短名称和长名称设置在res/resources中的strings.xml

中。

再菜单中,每一个菜单项是一个shortcut,shortcut需要设置它的图标,短标签,长标签,

如果我们设置了这个,那我们只是设置了shortcut的属性,还需要设置它跳转到哪个活动,这个时候就需要intent意图去和app申明我们有跳转到某一个Activity的需求。

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
   <shortcut
       android:shortcutId="first"
       android:enabled="true"
       android:icon="@mipmap/ic_launcher"
       android:shortcutShortLabel="@string/first_short"
       android:shortcutLongLabel="@string/first_long">
       <!-- targetClass指定了点击该项菜单后要打开哪个活动页面 -->
       <intent
           android:action="android.intent.action.VIEW"
           android:targetPackage="com.example.chapter04"
           android:targetClass="com.example.chapter04.ActStartActivity" />
       <categories android:name="android.shortcut.conversation"/>
   </shortcut>
   <shortcut
       android:shortcutId="second"
       android:enabled="true"
       android:icon="@mipmap/ic_launcher"
       android:shortcutShortLabel="@string/second_short"
       android:shortcutLongLabel="@string/second_long">
       <!-- targetClass指定了点击该项菜单后要打开哪个活动页面 -->
       <intent
           android:action="android.intent.action.VIEW"
           android:targetPackage="com.example.chapter04"
           android:targetClass="com.example.chapter04.JumpFirstActivity" />
       <categories android:name="android.shortcut.conversation"/>
   </shortcut>
   <shortcut
                    android:shortcutId="third"
       android:enabled="true"
       android:icon="@mipmap/ic_launcher"
       android:shortcutShortLabel="@string/third_short"
       android:shortcutLongLabel="@string/third_long">
       <!-- targetClass指定了点击该项菜单后要打开哪个活动页面 -->
       <intent
           android:action="android.intent.action.VIEW"
           android:targetPackage="com.example.chapter04"
           android:targetClass="com.example.chapter04.LoginInputActivity" />
       <categories android:name="android.shortcut.conversation"/>
   </shortcut> 
</shortcuts>

intent节点主要由两个属性需要进行修改,有targetPackage和targetClass,其中targetPackage属性固定为当前app的包名,而targetClass描述了菜单项对应的活动类的完整路径。在AndroidManifest.xml中我们需要找到MainActivity所在的节点,在这个节点的内部补充元数据的配置:

<activity android:name=".MainActivity">
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
   <!-- 指定快捷方式。在桌面上长按应用图标,就会弹出@xml/shortcuts所述的快捷菜单 -->
   <meta-data
              android:name="android.app.shortcuts"
              android:resource="@xml/shortcuts" /> 
</activity>

在这个元数据里,你需要告诉app你这个元数据是快捷菜单,还要告诉它你这个快捷菜单在哪里,所以需要配置资源文件。 

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值