4

私はタイトル、要約、およびアイコンを使用するカスタム設定を使用しています。この設定はアイテム(スキン、アプリなど)を選択するために使用され、現在の選択肢を要約します。ここでは正常に動作して好み(上)とハニカム/ ICSの私の問題があります:ハニカム/ ICSでカスタム設定が壊れています

http://imgur.com/vKPOu

http://imgur.com/EiMBr

スペースが好みのために作られているが、/要約してもデフォルトのタイトルが表示されません、アイテム選択の意図も発火していません。

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+android:id/widget_frame" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:paddingRight="?android:attr/scrollbarSize"> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="16dip" 
     android:layout_marginRight="6dip" 
     android:layout_marginTop="6dip" 
     android:layout_marginBottom="6dip" 
     android:layout_weight="1"> 
     <TextView 
      android:id="@+android:id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:ellipsize="marquee" 
      android:fadingEdge="horizontal" /> 
     <TextView 
      android:id="@+android:id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@android:id/title" 
      android:layout_alignLeft="@android:id/title" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:maxLines="2" /> 
    </RelativeLayout> 
    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     android:layout_gravity="center" /> 
</LinearLayout> 

とカスタム好み自体::好み自体があまりにも刺激的な

import android.content.Context; 
import android.content.pm.PackageManager; 
import android.content.pm.PackageManager.NameNotFoundException; 
import android.graphics.drawable.Drawable; 
import android.preference.Preference; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageView; 

public class SelectedAppPreference extends Preference { 
    private Drawable mIcon; 

    public SelectedAppPreference(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     final PackageManager pm = context.getPackageManager(); 
     String packageName = context.getSharedPreferences("appPrefs", Context.MODE_PRIVATE).getString("selected_app_package", null); 

     this.setLayoutResource(R.layout.icon_pref); 
     try { 
      this.mIcon = pm.getApplicationIcon(packageName); 
     } catch (NameNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 

    public SelectedAppPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     final PackageManager pm = context.getPackageManager(); 
     String packageName = context.getSharedPreferences("appPrefs", Context.MODE_PRIVATE).getString("selected_app_package", null); 

     this.setLayoutResource(R.layout.icon_pref); 
     try { 
      this.mIcon = pm.getApplicationIcon(packageName); 
     } catch (NameNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onBindView(final View view) { 
     super.onBindView(view); 

     final ImageView imageView = (ImageView)view.findViewById(R.id.icon); 
     if ((imageView != null) && (this.mIcon != null)) { 
      imageView.setImageDrawable(this.mIcon); 
     } 
    } 

    public void setIcon(final Drawable icon) { 
     if (((icon == null) && (this.mIcon != null)) || ((icon != null) && (!icon.equals(this.mIcon)))) { 
      this.mIcon = icon; 
      this.notifyChanged(); 
     } 
    } 

    public Drawable getIcon() { 
     return this.mIcon; 
    } 
} 

何もここで好みのレイアウトです。私は問題が優先レイアウトxmlにあると感じていますが、正確に何が正しく動作していないのか分かりません。 Android 2.1,2.2,3.3のデバイスで設定が正常に動作していることを確認でき、3.2と4.0の問題がありました。助言がありますか?

+0

リンクが死んでいる.. – marcinj

答えて

6

私はサードパーティのカスタム設定に似た問題を抱え、ウィジェットのフレームを見えるように修正しました。 ICSではデフォルトでは見えませんでした。それはあなたのカスタム設定にどのようにマップするのかわかりません。

// This line was in the original code. 
LinearLayout widgetFrameView = ((LinearLayout) mView 
        .findViewById(android.R.id.widget_frame)); 
... 
// This line fixed the visibility issue 
widgetFrameView.setVisibility(View.VISIBLE); 

また、他のICSコントロールとの整合性を図るために、ビューを再調整する必要がありました。

+0

美しい、それは問題でした。ビューを再調整するために変更したものを覚えていますか? – nsiderTalon

+1

Google、なぜこのような急な変更を行っていますか? – Nappy

2

私は固定サードパーティのカスタム好みはこのサイト

https://github.com/attenzione/android-ColorPickerPreference/tree/master/src/net/margaritov/preference/colorpicker

私のコードから取られる(ColorPickerPreference.setPreviewColorに())

widgetFrameView.setVisibility(View.VISIBLE); 
final boolean preApi14 = android.os.Build.VERSION.SDK_INT < 14; 
final int rightPaddingDip = preApi14 ? 8 : 5; 

widgetFrameView.setPadding(
         widgetFrameView.getPaddingLeft(), 
         widgetFrameView.getPaddingTop(), 
         (int)(mDensity * rightPaddingDip), 
         widgetFrameView.getPaddingBottom() 
       ); 

float mDensity = getContext().getResources().getDisplayMetrics().density; 
のように見えます

これはminSdkVersion = 8で、targはありませんetSdkVersion。 targetSdkVersionを14以上に設定すると、右側のカスタム設定要素が標準の設定要素(たとえばチェックボックス)とうまく一致するまで '5'を別のものに変更する必要があります。

関連する問題