2017-02-22 14 views
0

Я ищу, как изменить цвет фона щелкнутого GridView элемента при щелчке, а затем вернуться к нормальному цветуXamarin Android: Изменение цвета фона элемента GridView при нажатии

Я хочу, чтобы, когда я нажмите, цвет фона моего элемента gridview - оранжевый, а затем через короткое время фон снова станет белым.

Вот что я нашел, но «Устройство» неизвестно.

e.View.SetBackgroundColor(Color.White); 
Device.StartTimer(TimeSpan.FromSeconds(0.25),() => 
{ 
    e.View.SetBackgroundColor(Color.Orange); 
    return false; 
}); 

Я попытался это:

1) Определение цвета путем создания colors.xml значений

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<color name="pressed_color">#972234</color> 
<color name="default_color">#000000</color> 
</resources> 

2) Создание bg_key.xml в вытяжке

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:state_selected="true" 
    android:drawable="@color/pressed_color"/> 
<item 
    android:state_pressed="true" 
    android:drawable="@color/pressed_color"/> 
<item 
    android:drawable="@color/default_color" /> 
</selector> 

3) Set android: listSelector и listSelector to GridView

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:columnWidth="90dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="10dp" 
     android:horizontalSpacing="10dp" 
     android:stretchMode="columnWidth" 
     android:gravity="center" 

     android:listSelector="@drawable/bg_key" 
     android:background="@color/default_color" 

     /> 

И он работает в моем боковом меню, но не на моем gridview ... Мой сетчатый вид состоит из ImageView и TextView - это проблема?

Кроме того, что я должен изменить (для моего бокового меню), чтобы изменить цвет шрифта, а не цвет фона?

ответ

0

Вы не можете использовать Device -Class, потому что он доступен только в Xamarin.Forms, а не на родном Xamarin.

Но вы можете использовать System.Timers.Timer класс, чтобы изменить цвет обратно через некоторое время:

var t = new System.Timers.Timer(); 
t.Interval = 250; // In miliseconds 
t.Elapsed += (sender, args) => 
{ 
    // Change color back on the UI-Thread 
    RunOnUiThread(() => 
    { 
     e.View.SetBackgroundColor(Color.Orange);   
    }); 

}; 
t.Start(); 

Важное замечание: Elapsed -Event является NOT invoked on the UI-Thread. Поэтому, чтобы что-то изменить в пользовательском интерфейсе (точно так же, как ваш фоновый цвет), вам нужно сделать это в UI-Thread.

+0

Я не знаю, почему, но это не работает Eather ... – Kurapika

+0

Мои телепатические способности не так хороши ... Пожалуйста, объясните, что именно у вас есть пытался и что произошло. В противном случае мы не сможем вам помочь – Joehl

+0

Я пробовал то, что вы разместили, и цвет не меняется. Я новичок в Xamarin, поэтому, возможно, я не написал его в хорошем месте, я написал его здесь: «gridView.ItemClick + = (s, e) => { var t = new System.Timers.Timer() ; t.Interval = 250; // В милисекунд t.Elapsed + = (отправитель, арг) => { RunOnUiThread (() => { e.View.SetBackgroundColor (Color.Orange); }); }; t.Start(); }; ' – Kurapika

0

Device.StartTimer Используется в Xamarin.Forms для запуска повторяющегося таймера с использованием возможностей часов устройства. Он не доступен на родном языке.

Я предпочитаю, чтобы вы могли просто сделать свой собственный стиль.


Попробуйте это:

1) Определение цвета путем создания colors.xml в values

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="pressed_color">#972234</color> 
    <color name="default_color">#000000</color> 
</resources> 

2) Создание bg_key.xml в drawable

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_selected="true" 
     android:drawable="@color/pressed_color"/> 
    <item 
     android:state_pressed="true" 
     android:drawable="@color/pressed_color"/> 
    <item 
     android:drawable="@color/default_color" /> 
</selector> 

3) Установите android:listSelector и listSelector в сетка Просмотр

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/gridview" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:columnWidth="90dp" 
      android:numColumns="auto_fit" 
      android:verticalSpacing="10dp" 
      android:horizontalSpacing="10dp" 
      android:stretchMode="columnWidth" 
      android:gravity="center" 

      android:listSelector="@drawable/bg_key" 
      android:background="@color/default_color" 

      /> 
+0

Не работает eather, цвет не меняется ... элементы в виде сетки состоят из inageView и TextView, это проблема? – Kurapika

+0

Потому что он работает над моими боковыми элементами меню, поэтому я предполагаю, что это должно быть из-за того, что TextView и ImageView правы? – Kurapika

+0

Предоставьте небольшой образец своей работы, поэтому я могу пройти через нее. – Vaikesh

0

Вот мой код:

Main.axml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#EBEAEF"> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize" 
    android:paddingLeft="5dp" 
    android:background="#282059" 
    android:title="test" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" /> 
<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 
<!-- The Main Content View --> 
    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <ImageView 
      android:id="@+id/logoBackgroud" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:src="@drawable/icon_background" /> 
     <GridView 
      android:id="@+id/grid_view_image_text" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:columnWidth="350dp" 
      android:layout_margin="10dp" 
      android:gravity="center" 
      android:numColumns="auto_fit" /> 
    </RelativeLayout> 

gridview.axml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#EBEAEF"> 
<RelativeLayout 
    android:layout_height="90dp" 
    android:layout_width="match_parent" 
    android:orientation="vertical" 
    android:layout_margin="25dp" 
    android:listSelector="@drawable/bg_key" 
    android:background="#F4F4F6"> 
<!-- Letter yellow color = #FAB322 --> 
    <TextView 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_width="95dp" 
     android:layout_height="fill_parent" 
     android:textSize="66sp" 
     android:textColor="#0071CF" 
     android:background="@color/white" 
     android:layout_centerVertical="true" 
     android:layout_gravity="left" 
     android:gravity="center_vertical|center_horizontal" 
     android:text="A" 
     android:paddingBottom="5dp" 
     android:id="@+id/textViewLetter" /> 
    <TextView 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:paddingLeft="15dp" 
     android:layout_toRightOf="@+id/textViewLetter" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="35dp" 
     android:textSize="22sp" 
     android:gravity="center_vertical" 
     android:background="#F4F4F6" 
     android:textColor="#262057" 
     android:textStyle="bold" 
     android:listSelector="@drawable/bg_key" 
     android:id="@+id/textViewFileName" /> 
    <ImageView 
     android:layout_width="35dp" 
     android:layout_height="wrap_content" 
     android:paddingTop="5dp" 
     android:layout_alignParentRight="true" 
     android:id="@+id/imageViewIcon" /> 
</RelativeLayout> 
</LinearLayout> 
+0

@ Вайкеш вот мой код :) – Kurapika

Смежные вопросы