3.3合并资源
问题
您要更改产品说明中的图像,文本或其他资源。

向风格添加适当的资源目录,添加相关文件,并更改它们包含的值。
讨论
考虑在配方3.2中讨论的“Hello World with Attitude”应用程序,它为Hello,World应用程序定义了三种风格:傲慢​​,友好和有尊严。在每种情况下,应用程序都会提示用户输入名称,然后按名称对用户进行问候。每个的Java代码是相同的,但每个flavor的外观和感觉是不同的。
产品风格在Gradle构建文件中定义,如示例3-7所示。
实例3-7。产品风格在build.gradle文件中

android {
// ... other settings ...
productFlavors {
arrogant {
applicationId 'com.oreilly.helloworld.arrg'
}
friendly {
applicationId 'com.oreilly.helloworld.frnd'
}
obsequious {
applicationId 'com.oreilly.helloworld.obsq'
}
}
}

每个flavor都有一个单独的applicationId,这样它们都可以部署到同一个设备进行演示。
示例3-8包含MainActivity类,以及它的onCreate和sayHello方法。
实例3-8。 MainActivity类从Hello,World应用程序

public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.name_edit_text);
}
public void sayHello(View view) {
String name = editText.getText().toString();
Intent intent = new Intent(this, WelcomeActivity.class);
intent.putExtra("user", name);
startActivity(intent);
}
}

该活动具有类型为EditText的属性,用于用户的名称。 say Hello方法检索名称,将其作为额外内容添加到Intent,并使用intent启动WelcomeActivity。
主活动的布局只是一个具有TextView,EditText和Button的垂直LinearLayout(例3-9)。
实例3-9。 activity_main.xml布局

<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">
<TextView
android:id="@+id/name_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<EditText
android:id="@+id/name_edit_text"
android:hint="@string/name_hint"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:onClick="sayHello"
android:text="@string/hello_button_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

MainActivity是发射器。图3-5显示了应用程序的初始屏幕,针对傲慢风味进行了定制。


图3-5。你的屏幕在傲慢的味道
应用程序名称和初始问候语是如何设置的?所有三种口味都有自己的资源目录,在app / <flavor> / res下。在每种情况下,都添加了名为values的子文件夹,并将来自app / src / main / res / values的strings.xml文件的副本复制到其中。傲慢味道的项目结构如图3-6所示。
用于傲慢风味的strings.xml文件如示例3-10所示。
实例3-10。 Arrogant res / values文件夹中的strings.xml文件

<resources>
<string name="app_name">Arrogant</string>
<string name="title_activity_welcome">His/Her Royal Highness</string>
<string name="hello_world">Arrogant</string>
<string name="greeting">We condescend to acknoweldge your
presence, if just barely, %1$s.</string>
</resources>

图3-6。项目视图显示Arrogant风味目录
通过将项目flavor的res文件夹中的值与构建类型和主目录树中的同一文件夹相结合来合并资源。优先级是:构建类型覆盖产品风格,其覆盖主源集合。
非Java资源互相覆盖,其中构建类型具有最高优先级,然后是flavor,然后是主目录。
WelcomeActivity有一个onCreate方法,用于检索用户的名称并向用户打招呼(示例3-11)。
实例3-11。 WelcomeActivity,欢迎用户

public class WelcomeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
String name = getIntent().getStringExtra("user");
TextView greetingText = (TextView) findViewById(R.id.greeting_text);
String format = getString(R.string.greeting);
greetingText.setText(String.format(format, name));
}
}

WelcomeActivity的布局包含一个TextView,文本和底部的图像(示例3-12)。
实例3-12 activity_welcome.xml布局

<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.oreilly.helloworld.WelcomeActivity">
<TextView
android:id="@+id/greeting_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:textSize="24sp"
android:drawableBottom="@drawable/animal"
/>
</LinearLayout>

每个flavor都有自己的values.xml和animal.png文件,它们改变了给出的问候语。例3-10中的值导致欢迎,如图3-7所示。
每个额外的风味以相同的方式处理。友好的flavor使用示例3-13中显示的strings.xml文件。
实例3-13。 Friendly res / values文件夹中的strings.xml文件

<resources>
<string name="app_name">Friendly</string>
<string name="title_activity_welcome">We are BFFs!</string>
<string name="hello_world">Friendly</string>
<string name="greeting">Hi there, %1$s!</string>
</resources>

友好的欢迎页面如图3-8所示。
最后,Obsequious字符串如例3-14所示。

实例3-14。 Obsequious res / values文件夹中的strings.xml文件

<resources>
<string name="app_name">Obsequious</string>
<string name="hello_world">Obsequious</string>
<string name="title_activity_welcome">your humble servant</string>
<string name="greeting">O great %1$s, please accept this pathetic
greeting from my unworthy self. I grovel in your
general direction.</string>
</resources>

图3-7。 欢迎来到傲慢的味道


图3-8。 欢迎在友好的味道
生成的Obortedious欢迎页面如图3-9所示。


图3-9。 欢迎在Obsequious的味道
合并非Java资源很容易。 只需添加正确的文件夹和文件,flavor值将覆盖main。 要部署应用程序的单个风格,请从“构建变量”视图中选择它,如图3-10所示。


图3-10。 在Android Studio中创建变体视图

Android的Gradle技巧 3.3合并资源相关推荐

  1. android对错图标,Android Studio Gradle图标错误,清单合并

    我一直看到此消息,但不确定如何彻底解决它. Error:(43, 9) Attribute application@icon value=(@drawable/new_app_icon) from A ...

  2. Android - ReactNative Debug 技巧

    Android - ReactNative Debug 技巧 前言 因为旧的项目使用了 RN,在修复 Bug 的时候,很难定位问题,在 Debug 的时候花费了大量的时间.今天小结下 Debug 技巧 ...

  3. android studio gradle 自动更新,android studio gradle 两种更新方法更新

    又快一年没有使用AS了,正好要查看一个Android项目代码,干脆升级到新版试试看新变化,旧版本为3.1.2,目前最新版本为3.4.2,AS的升级是很简单的直接update等待即可. 升级完了,打开G ...

  4. 计算机快捷键m是什么,教程方法;m、ac快捷键电脑技巧-琪琪词资源网

    琪琪词资源网-教程方法;m.ac快捷键电脑技巧,以下是给大家带来的教程方法;m.ac快捷键,大家可以了解一下哦! 熟记快捷键 快捷键对提升效率的帮助最大,但初期掌握曲线也比较陡.熟记一些常用快捷键之后 ...

  5. Android程序设计报告总结,Android编程常用技巧实例总结

    本文实例讲述了Android编程常用技巧.分享给大家供大家参考,具体如下: 1. 登录的时候,如果输入有误,则输入框左右震动,表示输入有误 在res下准备一个anim文件夹,里面包含两个文件,main ...

  6. Android Bitmap实战技巧

    Android Bitmap实战技巧 http://www.cnblogs.com/punkisnotdead/p/4881771.html 注:本文大量参考谷歌官方文档自http://develop ...

  7. 深入理解Android之Gradle

    深入理解Android之Gradle 格式更加精美的PDF版请到:https://pan.baidu.com/s/1GfN6F8sOaKFAdz5y1bn3VQ下载 weibo分享失效,请各位到百度云 ...

  8. Jitpack使用指南:maven-publish如虎,jitpack如翼 【安卓Java组件化模块化】【更多gradle技巧】

    上文总结了三种多模块开发的方法. 第一种:在setting.gradle中定义子模块然后 api Project(':...'),直接引用 . 第二种,使用 maven-publish 部署至本地仓库 ...

  9. 【转载】Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?

    [转载]Android提醒微技巧,你真的了解Dialog.Toast和Snackbar吗? 转载请注明出处:http://blog.csdn.net/guolin_blog/article/detai ...

最新文章

  1. 马上 2018 年了,该不该下定决心转型AI呢?
  2. html应用缓存,HTML5应用缓存
  3. SA 分析专家认证名单出炉!这一期学员太牛了
  4. Go的内置函数/内建函数:len new make
  5. mysql 查询优化
  6. TensorFlow学习笔记(二十六)CNN的9大模型之LeNet5的原理讲解
  7. SAP Fiori attachment rename debug
  8. Collecting Bugs POJ - 2096(基础概率dp+期望模板)
  9. 引入外部js如何通知页面其编码格式
  10. JS连续赋值与求值顺序
  11. 工具开发——端口开放扫描
  12. 计算机键盘的认识,认识键盘和使用键盘的方法
  13. 计算机格式化后数据恢复的基础,电脑硬盘格式化后数据能恢复吗
  14. 计算机无纸化考试题库,无纸化考试题库系统
  15. android查看显存大小,Shadow Size Computation 阴影大小计算
  16. 软件测试面试题: B/S、C/S、OA 什么意思?
  17. NetSpectre:通过网络读取任意内存
  18. linux 设置显卡命令,linux安装显卡驱动命令
  19. Suspicious method call; should probably call draw rather than onDraw
  20. 用matlab发邮件的简易教程

热门文章

  1. 六级考研单词之路-五十二
  2. 深度学习caffe实战(一)验证码识别
  3. 苹果手机拆机与原理图对比分析(设计规范篇)
  4. 设计模式之略见一斑(桥梁模式bridge)
  5. ASUS-Z97K-4980HQ-Hackintosh黑苹果EFI引导文件
  6. java使用poi绘制折线图和饼图(用数据绘制和使用excel生成的表格数据)
  7. Android中替换头像图标和背景图片
  8. 北京10大律师事务所排名
  9. 坐标系与国内常见坐标转换
  10. 亚泰盛世邀您参观第66届中国教育装备展示会