📜  如何在Android中实现首选项设置屏幕?

📅  最后修改于: 2021-05-13 15:35:23             🧑  作者: Mango

在许多应用程序中,我们已经看到了“设置”屏幕,这是大多数应用程序中最常见的。此设置屏幕用于管理用户的首选项。为了创建此设置屏幕,android提供了用于进行设置首选项屏幕的功能。在本文中,我们将介绍如何在Android中实现偏好设置屏幕。

我们将在本文中构建什么?

我们将构建一个简单的应用程序,其中将显示一个简单的按钮,然后单击该按钮将打开一个设置屏幕,该屏幕将使用设置首选项创建。此设置屏幕的外观类似于我们可以在常规选项的YouTube设置中看到的屏幕。下面提供了一个示例视频,以使您对我们在本文中将要做的事情有个大概的了解。注意,我们将使用Java语言实现该项目。

分步实施

步骤1:创建一个新项目

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。

步骤2:使用activity_main.xml文件

导航到应用程序> res>布局> activity_main.xml,然后将以下代码添加到该文件中。以下是activity_main.xml文件的代码。

XML


  
    
    


Java
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
  
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
    
    // creating a variable for our button.
    private Button settingsBtn;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
          
        // initializing our button.
        settingsBtn = findViewById(R.id.idBtnSettings);
          
        // adding on click listener for our button.
        settingsBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // opening a new intent to open settings activity.
                Intent i = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(i);
            }
        });
    }
}


XML

    GFG App
    Remind me to take a break
    key_upload_quality
    Remind me to take a break
    remind_me_for_bed_time
    Remind me for bed time
    prefs_limit_data_usage
    Only stream HD video on Wi-Fi
    Limit mobile data usage
    Double-tap to seek
    pref_seek_val
    seconds
    Uploads
    pref_uploads
    Specify network preferences for uploads
    prefs_restricted_mode
    Restricted Mode can help to hide videos with potentially mature content.No filter is 100% accurate, but it should help you to avoid most of this type of content.
    Restricted Mode
    prefs_enable_stats
    Enable stats for nerds
  
    
        360p
        480p
        720p
        1080p
        Original
    
  
    
        1 hours
        2 hours
        3 hours
        5 hours
        10 hours
    
  
    
        5
        10
        15
        20
        30
    
      
    
        0
        1
        2
        3
        4
    
  
    
        Only when on Wi-Fi
        On any network
    
  


XML


      
    
    
  
        
        
        
        
  
        
        
        
  
        
        
  
        
        
  
        
        
  
        
        
  
        
        
  
    
  


Java
import android.os.Bundle;
import android.preference.PreferenceFragment;
  
import androidx.annotation.Nullable;
  
public class SettingsFragment extends PreferenceFragment {
  
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          
        // below line is used to add preference
        // fragment from our xml folder.
        addPreferencesFromResource(R.xml.prefrences);
    }
}


XML


  
    
    
  


Java
import android.os.Bundle;
  
import androidx.appcompat.app.AppCompatActivity;
  
public class SettingsActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
          
        // below line is to change 
        // the title of our action bar.
        getSupportActionBar().setTitle("Settings");
          
        // below line is used to check if 
        // frame layout is empty or not.
        if (findViewById(R.id.idFrameLayout) != null) {
            if (savedInstanceState != null) {
                return;
            }
            // below line is to inflate our fragment.
            getFragmentManager().beginTransaction().add(R.id.idFrameLayout, new SettingsFragment()).commit();
        }
    }
}


步骤3:建立新活动以显示设定画面

导航到应用程序> Java >应用程序的包名称>右键单击它>新建>活动,然后选择空活动并将其命名为SettingsActivity

步骤4:使用MainActivity。 Java文件

转到MainActivity。 Java文件并参考以下代码。下面是MainActivity的代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。

Java

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
  
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
    
    // creating a variable for our button.
    private Button settingsBtn;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
          
        // initializing our button.
        settingsBtn = findViewById(R.id.idBtnSettings);
          
        // adding on click listener for our button.
        settingsBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // opening a new intent to open settings activity.
                Intent i = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(i);
            }
        });
    }
}

第5步:创建首选项文件以显示我们的设置

导航到应用程序> res>右键单击它> New> Android Resource文件,您将看到以下屏幕。

步骤6:在字符串.xml文件中添加以下代码

导航至应用程序> res>值>字符串.xml文件,然后将以下代码添加到其中。

XML格式


    GFG App
    Remind me to take a break
    key_upload_quality
    Remind me to take a break
    remind_me_for_bed_time
    Remind me for bed time
    prefs_limit_data_usage
    Only stream HD video on Wi-Fi
    Limit mobile data usage
    Double-tap to seek
    pref_seek_val
    seconds
    Uploads
    pref_uploads
    Specify network preferences for uploads
    prefs_restricted_mode
    Restricted Mode can help to hide videos with potentially mature content.No filter is 100% accurate, but it should help you to avoid most of this type of content.
    Restricted Mode
    prefs_enable_stats
    Enable stats for nerds
  
    
        360p
        480p
        720p
        1080p
        Original
    
  
    
        1 hours
        2 hours
        3 hours
        5 hours
        10 hours
    
  
    
        5
        10
        15
        20
        30
    
      
    
        0
        1
        2
        3
        4
    
  
    
        Only when on Wi-Fi
        On any network
    
  

步骤7:使用prefrences.xml文件

在首选项中,以下列出了不同类型的首选项:

  • EditTextPreference :用于从用户获取文本。
  • ListPreference :此选项用于显示一个对话框,其中包含可供选择的选项列表。
  • CheckBoxPreference :此选项用于显示复选框以切换设置。
  • SwitchPreference :此选项用于打开和关闭开关。
  • RingtonePreference :此选项用于打开设备的铃声页面。
  • 具有Intent操作android.intent.action.VIEW的首选项–打开导航到URL的外部浏览器。

导航到app> res> xml> prefrences.xml文件,然后将以下代码添加到其中。在代码中添加了注释,以便更详细地了解。

XML格式



      
    
    
  
        
        
        
        
  
        
        
        
  
        
        
  
        
        
  
        
        
  
        
        
  
        
        
  
    
  

步骤8:现在创建一个新的Java类来显示我们的首选项片段

导航到应用程序> Java >应用程序的程序包名称>右键单击它>新建> Java类,并将其命名为SettingsFragment,然后将以下代码添加到其中。在代码中添加了注释,以便更详细地了解。

Java

import android.os.Bundle;
import android.preference.PreferenceFragment;
  
import androidx.annotation.Nullable;
  
public class SettingsFragment extends PreferenceFragment {
  
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          
        // below line is used to add preference
        // fragment from our xml folder.
        addPreferencesFromResource(R.xml.prefrences);
    }
}

步骤9:使用activity_settings.xml文件

导航到activity_settings.xml文件,并将以下代码添加到其中。在代码中添加了注释,以便更详细地了解。

XML格式



  
    
    
  

步骤10:使用SettingsActivity。 Java文件

导航到应用程序> Java >您的应用程序包名称> SettingsActivity。 Java文件,并向其中添加以下代码。在代码中添加了注释,以便更详细地了解。

Java

import android.os.Bundle;
  
import androidx.appcompat.app.AppCompatActivity;
  
public class SettingsActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
          
        // below line is to change 
        // the title of our action bar.
        getSupportActionBar().setTitle("Settings");
          
        // below line is used to check if 
        // frame layout is empty or not.
        if (findViewById(R.id.idFrameLayout) != null) {
            if (savedInstanceState != null) {
                return;
            }
            // below line is to inflate our fragment.
            getFragmentManager().beginTransaction().add(R.id.idFrameLayout, new SettingsFragment()).commit();
        }
    }
}

现在运行您的应用程序,并查看该应用程序的输出。

输出:

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!