1. ホーム
  2. android

[解決済み] Xamarin.FormsのListView。タップされたアイテムのハイライト色を設定する

2023-05-12 12:43:02

質問

使用方法 Xamarin.Formsを使用する を使用して、どのように選択/タップされたListViewアイテムのハイライト/背景色を定義することができますか?

(私のリストは黒い背景と白いテキスト色を持っているので、iOS上のデフォルトのハイライトカラーは明るすぎます。一方、Android では、ハイライトはまったくなく、微妙な水平のグレーの線までです)。

(左:iOS、右:Android; "Barn2"を押している間)

どのように解決するのですか?

iOS

解決方法

カスタム ViewCellRenderer を設定することができます。 SelectedBackgroundView . 単に新しい UIView を作り、好きな背景色にすれば完了です。

public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
{
    var cell =  base.GetCell(item, reusableCell, tv);

    cell.SelectedBackgroundView = new UIView {
        BackgroundColor = UIColor.DarkGray,
    };

    return cell;
}

結果です。

注意

Xamarin.Formsの場合、以下のように 新しい UIView というように、単に現在の背景色を設定するのではありません。


アンドロイド

解決策

私がAndroidで見つけた解決策は、もう少し複雑です。

  1. 新しい描画オブジェクトを作成する ViewCellBackground.xml の中に Resources > drawable フォルダーに格納されます。

    <?xml version="1.0" encoding="UTF-8" ?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape android:shape="rectangle">
                <solid android:color="#333333" />
            </shape>
        </item>
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#000000" />
            </shape>
        </item>
    </selector>
    
    

    UI要素のデフォルト状態と"pressed"状態のための異なる色を持つソリッドシェイプを定義しています。

  2. 継承されたクラスを使用して ViewViewCell , 例えば

    public class TouchableStackLayout: StackLayout
    {
    }
    
    
  3. 背景リソースを設定するこのクラスのカスタムレンダラーを実装します。

    public class ElementRenderer: VisualElementRenderer<Xamarin.Forms.View>
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e)
        {
            SetBackgroundResource(Resource.Drawable.ViewCellBackground);
    
            base.OnElementChanged(e);
        }
    }
    
    

結果です。