мое приложение содержит ListView, и когда пользователь нажимает на один из элементов, выбранный цвет элемента меняется на другой цвет. Я воспользовался этим, добавив этот android:listSelector="@android:color/darker_gray"
в моем ListView, расположенном в файле activity_main.xml. Это именно то, что я ищу, но у меня проблемы с ним, потому что цвет фона также изменяется, когда пользователь удерживает элемент, но не нажимает на него. поэтому мне было интересно, был ли очень простой способ, которым я мог бы поместить этот код: android:listSelector="@android:color/darker_gray"
внутри моего метода OnItemClick. таким образом, когда щелкнут элемент из моего списка, я хочу, чтобы выбранный фон фона изменился. также я НЕ хочу переупорядочить свой список и поставить выбранные элементы сверху, я просто хочу, чтобы все элементы, которые пользователь нажал, имели другой цвет фона, поэтому я хочу поместить кодировку внутри onItemClick. В настоящее время я использую default_list_item_1 по умолчанию для моего ListView.
Дополнительная информация о приложении: это своего рода учебное приложение, в котором пользователю представлен список имен учебников. когда пользователь нажимает на имена, он загружает поточную ссылку, поэтому пользователь может просто передать ее в приложение (это уже сделано). Я также добавил сообщение тоста, которое показывает, когда пользователь нажимает на ссылки, доступные потоку (это похоже на то, что я хочу получить вместо тоста, оно меняет цвет фона выбранного элемента на darker_grey). я смог сделать все это внутри if-statements. например:
Внутри OnCreate()
String[] Tutorial = getResources().getStringArray(R.array.Tutorial);
spinner1 = (ListView) findViewById(R.id.spinner1);
spinner1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Tutorial));
spinner1.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int pos, long id)
{
if(pos==0)
{
// Do nothing
}
else if(pos==1)
{
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.parse("https://download846.mediafire.com/8cfxi4026iog/x4ywqe8dc8u2r4f/Hetalia+Season+1+Episode+1.mp4"); /* this is a random link to show you that my programing so far works(Enter link to the selected tutorial here)*/
i.setDataAndType(uri, "video/*");
try {
startActivity(i);
} catch (ActivityNotFoundException e) {
// Handle exception
} catch (Exception e) {
// Handle exception
}
Toast.makeText(parent.getContext(), parent.getItemAtPosition(pos).toString(), Toast.LENGTH_SHORT).show();
// android:listSelector="@android:color/darker_gray"
}
}
}
если вы все еще не понимаете, что я имел в виду, есть приложение в магазине googlePlay под названием Anime Plus TV, которое делает что-то похожее на то, что я имел в виду. в приложении, когда вы нажимаете на эпизод сериала (пример: Наруто), он загружает ссылку на поток эпизода, а также меняет цвет текста этого выбранного эпизода, чтобы, когда пользователь заканчивает просмотр эпизода, он не будет смущенный о том эпизоде, который он наблюдал, поскольку некоторые потоковые ссылки действительно не дают вам настоящего названия видео, где вы смотрите. но в отличие от них я просто хочу, чтобы фон выбранного учебника изменился
У вас есть два варианта.
1.progamatically: в этом случае, когда вы устанавливаете OnItemClickListener для своего ListView, получите дочерний элемент и setBackground для него.
String[] inputs = {"test1","test2","test3"};
final ListView l = (ListView)findViewById(R.id.listview);
l.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 ,inputs));
l.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long id) {
l.getChildAt(position).setBackgroundColor(android.R.color.black);
}
});
Вы можете определить цвета в файле color.xml в папке res/values (создать его, если у вас его нет) и использовать их как R.color.gray (пример) вместо android.R.color.black.
2.Использование Custom listSelector
в папке drawable создайте listselector.xml. В listselector вы можете обрабатывать разные состояния так:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selector style for listrow -->
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/test1" />
<item android:state_pressed="true"
android:drawable="@drawable/test2" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/test3" />
</selector>
для вашего дела я думаю, что использование первого пути является лучшим. спросите, есть ли у вас другие вопросы :)