【问题标题】:Background image selecting in the app在应用程序中选择背景图像
【发布时间】:2016-08-29 09:10:39
【问题描述】:

我想要的。 我目前在为我的应用程序设置背景时遇到问题。我想要的是一个可供应用用户选择的壁纸/背景选择页面。一旦他们通过单击图像视图选择了所需的背景,整个应用程序应该使用该图像作为他们的背景。就是这样。

我做了什么。 我创建了一个活动,它有 2 个 ImageView 作为可用壁纸的选择,并分配图像视图以在用户单击它们时设置背景图像。现在的问题是我不知道如何保存设置并将其应用于项目中的所有其他活动。

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/settingscreen"
tools:context="com.example.naris.auin.SettingsActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Background Selector"
    android:id="@+id/textViewBackgroundSelector"
    android:layout_below="@+id/switchNightMode"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="38dp" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageViewBackground1"
    android:layout_marginLeft="23dp"
    android:layout_marginStart="23dp"
    android:src="@drawable/rateicon"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageViewBackground2"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/textViewBackgroundSelector"
    android:layout_toEndOf="@+id/textViewBackgroundSelector"
    android:layout_marginLeft="36dp"
    android:layout_marginStart="36dp"
    android:src="@drawable/ic_launcher" />
 </RelativeLayout>

设置活动

public class SettingsActivity extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    final RelativeLayout Settingscreen = (RelativeLayout) findViewById(R.id.settingscreen);





    ImageView ImageViewBackground1 = (ImageView) findViewById(R.id.imageViewBackground1);
    ImageView ImageViewBackground2 = (ImageView) findViewById(R.id.imageViewBackground2);

    ImageViewBackground1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Settingscreen.setBackgroundResource(R.drawable.faqicon);

        }
    });

    ImageViewBackground2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Settingscreen.setBackgroundResource(R.drawable.rateicon);

        }
    });

}

public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode == android.view.KeyEvent.KEYCODE_BACK)
    {
        startActivity(new Intent(SettingsActivity.this,
                MainActivity.class));
        finish();
    }
    return false;
};

}

提前致谢。

【问题讨论】:

    标签: java android android-activity background wallpaper


    【解决方案1】:
    public class SettingsActivity extends AppCompatActivity {
    
    private static final String PREF_NAME = "nextage_quiz";
    private static final int PRIVATE_MODE = 0;
    
    SharedPreferences getPrefs;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
    
        getPrefs = this.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        final RelativeLayout Settingscreen = (RelativeLayout) findViewById(R.id.settingscreen);
    
        ImageView ImageViewBackground1 = (ImageView) findViewById(R.id.imageViewBackground1);
        ImageView ImageViewBackground2 = (ImageView) findViewById(R.id.imageViewBackground2);
    
        ImageViewBackground1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
    
                Settingscreen.setBackgroundResource(R.drawable.faqicon);
                getPrefs.edit().putInt("id", R.drawable.faqicon).apply();
            }
        });
    
        ImageViewBackground2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
    
                Settingscreen.setBackgroundResource(R.drawable.rateicon);
                getPrefs.edit().putInt("id", R.drawable.faqicon).apply();
            }
        });
    }
    

    MainActivity:

    public class MainActivity extends AppCompatActivity {
    
        private static final String PREF_NAME = "nextage_quiz";
        private static final int PRIVATE_MODE = 0;
    
        SharedPreferences getPrefs;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            getPrefs = this.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    
            ImageView background= (ImageView) findViewById(R.id.background);
            if(getPrefs.getInt("id",0) != 0) 
               background.setBackgroundResource(getPrefs.getInt("id",0));
    
        }
    

    更新:使用这些变量

            private static final String PREF_NAME = "nextage_quiz";
            private static final int PRIVATE_MODE = 0;
    
            SharedPreferences getPrefs;
    

    【讨论】:

    • 我收到“错误:找不到符号变量 PREF_NAME 和 PRIVATE_MODE”。这两个的目的是什么?我们是否需要将这部分代码(MainActivity)添加到每个其他活动中?没有其他方法可以使用 XML 设置背景吗?
    • 用“myprefs”替换PREF_NAME
    • 虽然没有编译。 C:\Users\..app\src\main\java\com\example\naris\auin\MainActivity.java 错误:(80, 46) 错误: 找不到符号变量 PREF_NAME 错误:(80, 57) 错误: 不能查找符号变量 PRIVATE_MODE C:\Users\..app\src\main\java\com\example\naris\auin\SettingsActivity.java 错误:(21, 46) 错误: 找不到符号变量 PREF_NAME 错误:(21, 57 ) 错误:找不到符号变量 PRIVATE_MODE 注意:某些输入文件使用或覆盖了已弃用的 API。注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 :app:compileDebugJavaWithJavac 失败
    • 你的问题解决了吗?
    • 私有静态最终字符串 PREF_NAME = "myprefs";私有静态最终 int PRIVATE_MODE = 0;使用这些变量。
    【解决方案2】:

    您应该使用首选项来执行此操作。 请参阅链接查看更多细节... https://developer.android.com/guide/topics/ui/settings.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2010-09-18
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多