2013-06-21 4 views
2

Я добавил пользовательский предпочтение моему проекту (код ниже). Я добавил его к моему предпочтению XML с помощью пользовательского widgetLayout:Пользовательские предпочтения не меняются

<w.PlusOnePreference 
    android:title="Rate App" 
    android:key="custom" 
    android:widgetLayout="@layout/plusone_pref"/> 

Preference макет XML:

<?xml version="1.0" encoding="utf-8"?> 
<com.google.android.gms.plus.PlusOneButton  
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:plus="http://schemas.android.com/apk/lib/com.google.android.gms.plus" 
android:id="@+id/plus_one_button" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center_vertical" 
android:focusable="false" 
plus:size="standard" /> 

Я вижу, расположение и кнопка в макете работает отлично. Единственная проблема заключается в том, что предпочтение не является интерактивным. Как будто он скрыт за чем-то.

Любые идеи о том, как сделать его интерактивным?

Если я добавляю обычный вариант (без макета виджетов), он отлично работает.

Спасибо.

public class PlusOnePreference extends Preference { 

private PlusClient mPlusClient = null; 

public PlusOnePreference(Context context) { 
    super(context); 

} 


public PlusOnePreference(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public PlusOnePreference(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

public void setPlusClient(PlusClient plusClient) { 
    mPlusClient = plusClient; 
} 



@Override 
protected void onBindView(View view) { 
    super.onBindView(view);  
    //mPlusOneButton = 
    PlusOneButton plusOneButton = (PlusOneButton)view.findViewById(R.id.plus_one_button); 
    plusOneButton.initialize(mPlusClient, SettingsActivity.URL, SettingsActivity.PLUS_ONE_REQUEST_CODE); 
} 
    } 
+0

Я попробовал ваш код BECA Я пытаюсь добавить плюс одну кнопку на мои живые обои, но в ней говорится, что мое предпочтение не является текстовым. Я просто скопировал ваш код, чтобы попробовать. У вас есть какой-нибудь рабочий пример, который вы могли бы использовать для тех, кто пытается сделать то же самое? Спасибо. –

+0

Класс предпочтений должен быть обновлен с помощью новых сервисов Google Play, но макет такой же. Может возникнуть другой вопрос с вашим кодом, предпочтение не должно быть TextView в любом случае ... – Ran

+0

Точно. Это моя точка зрения. Мой код точно так же, как и у вас. Verbatim –

ответ

8

в макете/plusone_pref.xml установить андроид: фокусируемый = «ложь» для кнопки

+0

Это не помогло. Я добавил xml макета. – Ran

+0

хорошо это потому, что ваша кнопка на самом деле ViewGroup, то setFocusable (ложь) для всех своих детей – pskink

+1

или использовать это для верхнего контейнера уровня (тест техника его подводит его, хотя) Android: descendantFocusability = « blocksDescendants» – pskink

0

предпочтение не имеет интерактивный атрибут, хотя есть onClick() метод. Попробуйте android:selectable.

+0

'androird: selectable = true' не помогло. Если я поместил базу 'Preference' в xml, тогда она будет доступна, и я получаю событие в' onPreferenceTreeClick'. – Ran

+0

Полезно знать! Благодарю. – HannahRose

4

Положив ответ Pskink вместе с комментарием Ран:

  • Если макет вашего персонализированного предпочтение является ViewGroup (например, * Layout), используйте android:descendantFocusability="blocksDescendants"
  • Если это только один View, используйте android:focusable="false"