Проблема с кнопкой внутри настраиваемого диалогового окна (созданного в адаптере recyclerview)

У меня есть RecyclerView, в каждом элементе есть кнопка (Поделиться), которая вызывает настраиваемый диалог, содержащий TextView и Button. Итак, я создаю настраиваемый диалог внутри AdapterRecyclerView, все в порядке, кроме внешнего вида кнопки.

похоже, что поверх него есть белый оверлей, и когда я нажимаю на него, наложение слегка исчезает.

Вот как кнопка выглядит в xml: enter image description here

и вот что я получаю: enter image description here

вот мой настраиваемый макет диалогового окна:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:theme="@style/AppTheme">

    <TextView
        android:id="@+id/tv_url"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autoLink="web"
        android:padding="@dimen/fab_margin"
        android:textSize="8pt"
        />

    <Button
        android:id="@+id/btn_copy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/copy_address"
        android:theme="@style/button"/>


</LinearLayout>

и это java-код, создающий диалог:

AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
LayoutInflater inflater = (LayoutInflater) view.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
builder.setView(inflater.inflate(R.layout.share_dialog, null));
    builder.setTitle(view.getContext().getResources().getString(R.string.share));
share = builder.create();
share.show();

Примечание: Я думаю, проблема связана с Inflater, особенно с этой строкой:

LayoutInflater inflater = (LayoutInflater) view.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

потому что в MainActivity он отлично работает, когда я заменяю его следующим образом:

LayoutInflater inflater = MainActivity.this.getLayoutInflater();

но я не могу его использовать, так как не могу получить Activity из адаптера.

Надеюсь, мой вопрос ясен, буду признателен за вашу помощь.

Редактировать: код @style/button

<style name="button" parent="ThemeOverlay.AppCompat.Light">
        <item name="colorControlHighlight">@color/colorPrimaryDark</item>
        <item name="colorButtonNormal">@color/colorGray</item>
        <item name="android:textColor">@color/colorWhite</item>
        <item name="android:colorAccent">@color/colorPrimary</item>
    </style>

Требуются ли теги theme и style на вашей кнопке?

Tepits 10.09.2018 10:28

@Tepits да, theme предназначен для зеленого фона и белого текста, я попытался удалить оба, но все равно проблема. Я удалил тег style сейчас, обнаружил, что он не нужен.

Outlandish 10.09.2018 10:50

Поскольку это тег style, лучше использовать тег style, чем тег theme. Как style="@style/button". Проверьте, решает ли это вашу проблему.

Tepits 10.09.2018 10:59

@Tepits Я пробовал, но проблема та же.

Outlandish 10.09.2018 11:06

Хорошо. Можете ли вы поделиться своим кодом в стиле button? @style/button

Tepits 10.09.2018 11:09

@Tepits конечно, добавил в вопрос. Хотя я не верю, что это связано со стилем, потому что я использовал диалог в MainActivity, и все работало нормально, проблема в том, когда я создаю диалог внутри адаптера.

Outlandish 10.09.2018 11:28

Понятно. Затем попробуйте пропустить ваш activity или context внутрь адаптера, чтобы вы могли использовать LayoutInflater inflater = MainActivity.this.getLayoutInflater();, который, как вы сказали, работает.

Tepits 10.09.2018 11:41

Проверьте эту ссылку, чтобы получить активность от адаптера. stackoverflow.com/questions/12142255/…

Tepits 10.09.2018 11:44

@Tepits Спасибо! Сначала я попробовал, но ничего не изменилось, но все заработало, когда я изменил android: layout_width и android: layout_height на wrap_content.

Outlandish 10.09.2018 12:11
0
9
256
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

измените свой parent = "ThemeOverlay.AppCompat.Light" на ThemeOverlay.AppCompat.Dark.ActionBar

Спасибо, Хоссам, но я нашел решение.

Outlandish 10.09.2018 12:22
Ответ принят как подходящий

Благодаря комментарию @Tepits и некоторым изменениям ... я нашел решение.

во-первых, как это подсказывало Вызов метода Activity из адаптера

Я заменил LayoutInflater inflater на это:

LayoutInflater inflater=  ((MainActivity)context).getLayoutInflater();

а затем изменил android:layout_width и android:layout_height в родительском макете в dialog.xml на wrap_content, и это сработало!

Другие вопросы по теме