PreferenceScreen, Preference를 이용한 설정화면 만들기
출처:
Udacity
사용자 인터페이스-설정(API가이드)
일단, 메뉴에서 쓰일 문자열을 string.xml에 정의해준다.
다음으로 세팅을 주관할 SettingActivity클래스를 만들어준다. 내부클래스로 PreferenceFragment를 상속받은 커스텀 프래그먼트도 역시 구현해주도록 한다. 이 프래그먼트 안에 설정창이 들어가게된다.
SettingActivity.java
위의 액티비티에 쓰이고있는 setting_activity.xml파일을 만들어준다.
액티비티를 추가해줬기 때문에 메니패스트 파일에 액티비티를 물론 추가해줘야한다.
res/menu에 main.xml을 만들어준다. (메뉴에 대해 알아보려면 링크를 참조하자.)
main.xml
설정 액티비티의 부모액티비티에 메뉴를 띄워주기위해 두개의 메서드를 오버라이드 한다.
이제 설정액티비티 내용을 채워보도록 하자. 일단 필요한 문자열을 추가해주자.
이제 구체적인 프레퍼런스 스크린을 정의해주도록 하자. res폴더 아래 xml리소스폴더를 만들어준다. 다음, setting_main.xml파일을 만들어준다. 파일을 만들어주면 PreferenceScreen이 루트뷰로 자동 작성되있는것을 볼 수 있을것이다. PreferenceScreen내에 여러타입의 Preference뷰를 만들 수 있는데, 여기선 간단하게 EditTextPreference뷰를 구현해보도록 하자.
setting_main.xml
SettingActivity의 내부클래스로 지정해준 커스텀설정프래그먼트에 onCreate메서드를 오버라이드하고, 위에서 작성한 setting_activity.xml파일을 addPreferenceFromResource()로 연결시켜준다.
SettingActivity.java
Udacity
사용자 인터페이스-설정(API가이드)
일단, 메뉴에서 쓰일 문자열을 string.xml에 정의해준다.
<!-- Settings Menu Item [CHAR LIMIT=NONE] -->
<string name="settings_menu_item">세팅</string>
<!-- Settings Activity Title [CHAR LIMIT=NONE] -->
<string name="settings_title">지진 규모 세팅</string>
다음으로 세팅을 주관할 SettingActivity클래스를 만들어준다. 내부클래스로 PreferenceFragment를 상속받은 커스텀 프래그먼트도 역시 구현해주도록 한다. 이 프래그먼트 안에 설정창이 들어가게된다.
SettingActivity.java
package com.example.android.quakereport;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
}
public static class EarthquakePreferenceFragment extends PreferenceFragment {
}
}
위의 액티비티에 쓰이고있는 setting_activity.xml파일을 만들어준다.
<fragment
android:name="com.example.android.quakereport.SettingsActivity$EarthquakePreferenceFragment"
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"
tools:context="com.example.android.quakereport.SettingsActivity">
</fragment>
주의할점은, android:name에 적절한 값을 넣어줘야한다는것이다. 이 속성은 레이아웃 안에서 인스턴스화 할 Fragment클래스를 지정해준다.액티비티를 추가해줬기 때문에 메니패스트 파일에 액티비티를 물론 추가해줘야한다.
<activity
android:name=".SettingsActivity"
android:label="@string/settings_title">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.android.quakereport.EarthquakeActivity"/>
</activity>
res/menu에 main.xml을 만들어준다. (메뉴에 대해 알아보려면 링크를 참조하자.)
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.android.quakereport.EarthquakeActivity">
<item
android:id="@+id/action_settings"
android:title="@string/settings_menu_item"
android:icon="@drawable/ic_filter"
android:orderInCategory="1"
app:showAsAction="ifRoom" />
</menu>
설정을 나타내는 ic_filter아이콘파일을 해상도별로 얻고싶다면 링크를 참조하도록 하자.설정 액티비티의 부모액티비티에 메뉴를 띄워주기위해 두개의 메서드를 오버라이드 한다.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent settingsIntent = new Intent(this, SettingsActivity.class);
startActivity(settingsIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
여기까지 따라했으면, 앱바에 설정액티비티와 연결되는 아이콘이 뜬 것을 확인할 수 있을것이다.(설정 액티비티는 아직 비어있는 상태이다)이제 설정액티비티 내용을 채워보도록 하자. 일단 필요한 문자열을 추가해주자.
<!-- Strings For Minimum Magnitude Preference [CHAR LIMIT=30] -->
<string name="settings_min_magnitude_label">최소 지진 규모</string>
<string name="settings_min_magnitude_key" translatable="false">min_magnitude</string>
<string name="settings_min_magnitude_default" translatable="false">6</string>
이제 구체적인 프레퍼런스 스크린을 정의해주도록 하자. res폴더 아래 xml리소스폴더를 만들어준다. 다음, setting_main.xml파일을 만들어준다. 파일을 만들어주면 PreferenceScreen이 루트뷰로 자동 작성되있는것을 볼 수 있을것이다. PreferenceScreen내에 여러타입의 Preference뷰를 만들 수 있는데, 여기선 간단하게 EditTextPreference뷰를 구현해보도록 하자.
setting_main.xml
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings_title">
<EditTextPreference
android:defaultValue="@string/settings_min_magnitude_default"
android:inputType="numberDecimal"
android:key="@string/settings_min_magnitude_key"
android:selectAllOnFocus="true"
android:title="@string/settings_min_magnitude_label" />
</PreferenceScreen>
SettingActivity의 내부클래스로 지정해준 커스텀설정프래그먼트에 onCreate메서드를 오버라이드하고, 위에서 작성한 setting_activity.xml파일을 addPreferenceFromResource()로 연결시켜준다.
SettingActivity.java
package com.example.android.quakereport;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
}
public static class EarthquakePreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings_main);
}
}
}
댓글
댓글 쓰기