《安卓开发官方文档》学习笔记二actionBar与适配问题

            《安卓开发官方文档》学习笔记二actionBar与适配问题

文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍

1.action bar

通过在项目的 res/menu 目录中新增一个XML 文件来为action bar 添加操作。

为想要添加到action bar 中的每个条目添加一个 <item> 元素。例如:

res/menu/main_activity_actions.xml

 

要为activity 添加action bar,只需简单地设置属性为 11 或者更大。例如:

<manifest ... >    
<uses-sdk android:minSdkVersion="11" ... />
    ...
</manifest>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <!-- 搜索, 应该作为动作按钮展示-->    
<item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
<!-- 设置, 在溢出菜单中展示 --><item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

action bar 布局菜条目,就要在activity 实现 onCreateOptionsMenu() 方法来 inflate 单资源从而 Menu 

onCreateOptionsMenu() 创建Menu菜单的项目

实现向上导航需要在manifest 文件中声明父activity ,同action bar 置向上按可用。

 

当使用Support 库时,必须使用 Theme.AppCompat 主题替代:

 

为下级Activity 添加向上按

实现向上导航需要在manifest文件中声明父activity,同时在action bar 中设置向上按钮可用。

如何在manifest 中声明一个activity 的父类,例如:

  <!--  main/home 活动 (没有上级活动) -->  
<activity
   android:name="com.example.myfirstapp.MainActivity" ...>    </activity>  <!-- 主活动的一个子活动--><activity
  android:name="com.example.myfirstapp.DisplayMessageActivity"  android:label="@string/title_activity_display_message"    android:parentActivityName="com.example.myfirstapp.MainActivity" >      <!--  meta-data 用于支持 support 4.0 以及以下来指明上级活动 -->  <meta-data
       android:name="android.support.PARENT_ACTIVITY"
       android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>

然后,通过调用setDisplayHomeAsUpEnabled() 来把app icon 设置成可用的向上按钮:

 
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);    setContentView(R.layout.activity_displaymessage);    getSupportActionBar().setDisplayHomeAsUpEnabled(true);    // 如果你的minSdkVersion属性是11活更高, 应该这么用:// getActionBar().setDisplayHomeAsUpEnabled(true);
}

由于系统已经知道 MainActivity  DisplayMessageActivity 的父activity,当用户按下向上按钮时,系统会导航到恰当的父activity - 你不需要去处理向上按钮的事件。

 

启用叠加模式(Overlay Mode)

要为action bar 启用叠加模式,需要自定义一个主题,该主题继承于已经存在的action bar 主题,并设置 android:windowActionBarOverlay 属性的值为 true

如果 minSdkVersion  11 或更高,自定须继 Theme.Holo (或者其子主

<resources>
    <!-- 为程序或者活动应用的主题样式 -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

支持Android 2.1 和更高

如果为了兼容运行在Android 3.0 以下版本的设备而使用了Support 库,自定义主题必须继承 Theme.AppCompat 主题(或者其子主题)。例如:

<resources>
    <!-- 为程序或者活动应用的主题样式 -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.AppCompat">
        <item name="android:windowActionBarOverlay">true</item>
 
        <!-- 兼容支持库 -->
        <item name="windowActionBarOverlay">true</item>
    </style>
</resources>

 

该主题包含两种不同的 windowActionBarOverlay :一个 android: ,另一个不的适用于包含Android 版本,不的适用于通Support 库中读取式样的旧版本

一、LayoutInflater.inflate()

该方法适用于所有布局填充的的场景,但使用前需要先实例化LayoutInflater对象

二、View.inflate()

这个是View类的静态方法,可直接调用,实际上还是使用了LayoutInflater,所以,它没有直接使用LayoutInflater.inflate()强大

 

适配不同的

UI中的字符串存在外部文件,通提取,是一种很好的做法

res/values/strings.xml,用于保存字符串

为支持多国语言,res/建一个外的values字符和ISO国家代码结尾命名,比如values-es/

使用字符

我们可以在源代码和其他XML文件中通过<string>元素的name属性来引用自己的字符串资源。在源代码中可以通过R.string.<string_name>语法来引用一个字符串资源,很多方法都可以通过这种方式来接受字符串。

// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);
 
// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

在其他XML文件中,每当XML属性要接受一个字符串值时,你都可以通过@string/<string_name>语法来引用字符串资源。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

适配不同的屏幕

声明针对不同屏幕所用的layoutbitmap(分辨率),必须把这些可选资源放置在独立的目录中,这与适配不同语言时的做法类似。同样要注意屏幕的方向(横向或纵向)也是一种需要考虑的屏幕尺寸变化,

引用layout/main.xml文件,系适配

 

创建不同的bitmap

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (基准)
  • ldpi: 0.75
  • 任何时候,当引用@drawable/awesomeimage时系统会根据屏幕的分辨率选择恰当的bitmap

适配不同的系版本

minSdkVersiontargetSdkVersion 属性,明在设计测试app时,最低兼容API级别和最高适用的API级别(这个最高的级别是需要通过我们的测试的)

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

 

AndroidBuild常量类中提供了对每一个版本的唯一代号,在我们的app中使用这些代号可以建立条件,保证依赖于高级别的API的代码,只会在这些API在当前系统中可用时,才会执行。

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42248302/article/details/85471793
今日推荐