Android的Gradle技巧 3.3合并资源

32 篇文章 0 订阅
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中创建变体视图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值