Erişilebilir bir uygulama geliştiriyorum. Bu amaçla, arayüzdeki tüm elemanların odağı doğru bir şekilde elde edebilmesi önemlidir, böylece Talckback tarafından okunabilirler. Bu, söz konusu Preference List only shows first elementOdağı beklendiği gibi çalışmıyor ListView
Bu dokunmatik modunda mükemmel çalışır gibi İçim bir ListView
ile PreferenceActivity
inşa ama aktive Talckback ile ListView
erişmeye çalıştığınızda (I ListView
Odaklı almak için deneyin Sanki) Beklediğim gibi çalışmıyor. Listedeki çocukların odaklanmasını istiyorum, tüm liste odaklanmıyor. Benim PreferenceActivity
içindeki
Ben ek bir sorun var
ListViews
kaydırma vardır ve kaydırma doğru çalışmıyor.
ListView
'u kaydırılabilir yapamaz mıyım?
Teşekkür
Kodu:
ListPreferences.java (Özel ListView)
import com.battleship.R;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.Preference;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.OnHierarchyChangeListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;
public class ListPreferences extends Preference implements
OnCheckedChangeListener, OnHierarchyChangeListener {
private ListView listView;
private View thisView;
private int listHeight = 0;
public ListPreferences(Context context) {
super(context);
}
public ListPreferences(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ListPreferences(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onClick() {
super.onClick();
Toast t = Toast.makeText(getContext(), "HOLA!", 3);
t.show();
}
@Override
protected View onCreateView(ViewGroup parent) {
this.setLayoutResource(R.layout.listview_preference_layout);
thisView = super.onCreateView(parent);
listView = (ListView) thisView.findViewById(android.R.id.list);
listView.setOnHierarchyChangeListener(this);
String[] contentString = new String[3];
if (getKey().equals("theme")) {
contentString = new String[] {
(getContext().getString(R.string.settings_theme_default)),
(getContext().getString(R.string.settings_theme_black)),
(getContext().getString(R.string.settings_theme_white)) };
} else {
contentString = new String[] {
(getContext().getString(R.string.settings_font_big)),
(getContext().getString(R.string.settings_font_medium)),
(getContext().getString(R.string.settings_font_little)) };
}
ArrayAdapter<String> array = new ArrayAdapter<String>(getContext(),
android.R.layout.simple_list_item_single_choice,
android.R.id.text1, contentString);
listView.setAdapter(array);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setFocusable(false);
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
return thisView;
}
private void updatePreference(int intRadio) {
SharedPreferences.Editor editor = getEditor();
editor.putInt(getKey(), intRadio);
editor.commit();
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
updatePreference(checkedId);
notifyChanged();
}
@Override
public void onChildViewAdded(View parent, View child) {
int childHeight = child.getMeasuredHeight();
if(childHeight > 0)
{
listHeight = listView.getAdapter().getCount() * childHeight;
thisView.setMinimumHeight(listHeight);
Log.i("LISTA","onChildViewAdded, done: "+listHeight+" "+childHeight);
}
}
public void onChildViewRemoved(View parent, View child) {
}
}
preference.xml (PreferenceActivity xml)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
android:key="player_settings"
android:title="@string/settings_player_config" >
<EditTextPreference
android:defaultValue="@string/settings_player_default_name"
android:dialogMessage="@string/settings_player_summary"
android:dialogTitle="@string/settings_playersname"
android:key="player_name"
android:summary="@string/settings_player_summary"
android:title="@string/settings_playersname" />
</PreferenceCategory>
<PreferenceCategory
android:key="volume"
android:title="@string/settings_volume" >
<com.battleship.preferences.SeekBarPreferences
android:defaultValue="50"
android:key="volume"
android:title="@string/settings_volume" />
</PreferenceCategory>
<PreferenceCategory
android:key="shine"
android:title="@string/settings_shine" >
<com.battleship.preferences.SeekBarPreferences
android:defaultValue="50"
android:key="shine"
android:title="@string/settings_shine" />
</PreferenceCategory>
<PreferenceCategory
android:key="themeTitle"
android:title="@string/settings_group_themes" >
<com.battleship.preferences.ListPreferences android:key="theme" />
</PreferenceCategory>
<PreferenceCategory
android:key="fontsTitle"
android:title="@string/settings_group_font_size" >
<com.battleship.preferences.ListPreferences android:key="font" />
</PreferenceCategory>
</PreferenceScreen>
SettingsActivity.java (PreferenceActivity)
package com.battleship;
import com.battleship.R;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class SettingsActivity extends PreferenceActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public View getCurrentFocus() {
Log.d("FOCO", "" + super.getCurrentFocus());
return super.getCurrentFocus();
}
@Override
public boolean onTrackballEvent(MotionEvent event) {
Log.d("TRACKBALL", "" + event);
return super.onTrackballEvent(event);
}
}
liste görünümü biçiminde bir liste görünümü çalışmaz. İç liste görünümünü LinearLayout ile değiştirin. – WarrenFaith
'setFocusableInTouchMode (true)' kullanmayı deneyin? –
Bir LinearLayaout ile deneyin ve aynı sonucu elde ederim ama daha kötü bir arayüzle, eğer LinearLayout ile odağın doğru bir işlevselliğini elde edebilirsem, onu değiştireceğim, ama şimdilik, öyle değil. – Mun0n