我有一个名为:preference的应用,我想为这些应用制作主题。我的首选AndroidManifest.xml是:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.preference.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
在MainActivity.java中:我收到主题更改按钮点击:
themeChange = (Button) findViewById(R.id.themeChange);
themeChange.setOnClickListener(this);
我有一个主题应用程序,其中包含PinkTheme(styles.xml),包名称为com.example.theme。
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<style name="PinkTheme" parent="AppBaseTheme" >
<item name="android:textColor">#FF69B4</item>
<item name="android:typeface">monospace</item>
<item name="android:textSize">40sp</item>
<item name="android:windowBackground">#008000</item>
</style>
</resources>
我喜欢的onClick()是:
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.themeChange:
Resources res = null;
try {
res = getPackageManager().getResourcesForApplication("com.example.theme");
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(null != res) {
int sId = res.getIdentifier("com.example.theme:style/PinkTheme", null, null);
Theme themeObject = res.newTheme(); // theme object
themeObject.applyStyle(sId, true); // Place new attribute values into the theme
getTheme().setTo(themeObject);
}
break;
default:
break;
}
}
我收到了主题包的主题对象,并尝试设置首选项应用程序的主题。但它不起作用。请帮助我:如何以编程方式将主题从其他应用程序设置到我当前的应用程序。
答案 0 :(得分:1)
如果您想要在一个应用程序中更改另一个应用程序中的设置,那么最简单的方法是将主题ID放入intent中并将该意图发送到您的MainActivity(或IntentService),其中接收应用程序可以处理数据。例如,当意图到来时,您可以像处理&#34; onClick&#34;中的点击事件一样处理它。逻辑。
例如,应用可以创建这样的意图:
Intent intent = new Intent("android.intent.action.MAIN");
intent.setComponent(new ComponentName("your.package", "your.package.component"));
intent.putExtra("theme_id", "theme_1");
startActivity(intent);
然后在您的活动中,使用getIntent().getStringExtra("theme_id")
将数据传递到您的应用。
答案 1 :(得分:1)
您需要使用应用程序的资源来加载主题。我在另一个帖子中回答了这个问题:https://stackoverflow.com/a/41948943/1048340
以下是包&#34; com.example.theme&#34;已安装,我们在另一个应用程序中使用应用程序的资源和主题样式:
vm.groupSortable = {
connectWith: ".group-container",
disabled: true
};
vm.disableDragAndDrop = function(bVar)
{
vm.groupSortable.disabled = bVar;
};
有关GitHub上的工作项目,请参阅here。
这会导致问题,因为所有布局,绘图,字符串等都将从其他应用程序的资源中加载。因此,您应该避免使用其他包中的主题,而是将资源和主题复制到您自己的项目中。