No meu antigo aplicativo Java, eu tinha um menu suspenso na barra de ação que apresentava uma opção de ajuste do tamanho da fonte e do tipo de fonte. Isso usava o PreferenceFragment, que foi descontinuado há muito tempo. Estou procurando um substituto no Kotlin. Tudo o que posso encontrar nos documentos são preferências, que é um subconjunto do banco de dados Room. Quero fornecer um xml de variáveis e usar um gerenciador de preferências para lembrar a escolha. A jornada é: o usuário clica em actionBar para obter um menu suspenso com dois itens, tamanho da fonte e nome da fonte
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:entries="@array/font_size"
android:entryValues="@array/fvalues"
android:key="fong"
android:summary="Click here to choose a font size"
android:title="Select Font Size" />
<ListPreference
android:entries="@array/font_name"
android:entryValues="@array/font_ttf"
android:key="fonz"
android:summary="Click here to change font"
android:title="Select Font" />
</PreferenceScreen>
Dependendo da sua seleção, você terá uma escolha de recursos
<resources>
<string-array name="font_size">
<item>Huge</item>
<item>Large</item>
<item>Normal</item>
<item>Small</item>
<item>Tiny</item>
</string-array>
<string-array name="fvalues">
<item>28</item>
<item>24</item>
<item>20</item>
<item>16</item>
<item>12</item>
</string-array>
<string-array name="font_name">
<item>Note</item>
<item>Flower</item>
</string-array>
<string-array name="font_ttf">
<item>Note_this.ttf</item>
<item>IndieFlower.ttf</item>
</string-array>
</resources
Quando o usuário seleciona um nome e tamanho de fonte, eles são usados em todo o aplicativo.
Este é o código actionBar
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.action_settings) {
Intent p = new Intent("app.sticky_notes.PREFS");
startActivity(p);
}
return false;
}
Que chama essa classe, que apresentou ao usuário um segundo menu. Então, ele salva as preferências escolhidas.
public class Prefs extends PreferenceActivity
{
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new Pref_frag()).commit();
}
public static class Pref_frag extends PreferenceFragment
{
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
}
Em seguida, chamo o gerenciador de preferências para obter as opções armazenadas
public int get_font_size() {
SharedPreferences get_prefs = PreferenceManager.getDefaultSharedPreferences(this);
String font_string = get_prefs.getString("fong", "24");
font_size = Integer.parseInt(font_string);
return font_size;
}
public String get_font_name() {
SharedPreferences get_prefs = PreferenceManager.getDefaultSharedPreferences(this);
font_name = get_prefs.getString("fonz", "Note_this.ttf");
return font_name;
}
Em kotlin, até onde eu sei, nada disso é possível. Todas as sharedPreferences apontam de volta para preferences, que é uma versão do banco de dados Room que é usado para armazenar a entrada do usuário. Eu quero o menu suspenso->configurações->menu de valores de configurações para que o usuário possa clicar em um botão de opção.
Não quero nenhuma entrada do usuário além da escolha do tamanho e tipo da fonte.
Devo estar esquecendo de alguma coisa. Alguém pode me indicar um exemplo prático?