#android #stripe-payments #themes #react-native-android
#Android #stripe-платежи #темы #react-native
Вопрос:
Я новичок в мобильной разработке и Android. Я работаю над приложением react native и пытаюсь интегрировать CardMultilineWidget из Stripe Android (через react native bridge). CardMultilineWidget работает нормально, я могу отправлять и получать события на Android и с Android на react native JS. Но единственная проблема в том, что я не смог настроить стиль виджета в машинном коде.
Я пробовал это. Я читаю файл ресурсов с помощью синтаксического анализатора XML и передаю его конструктору CardMultilineWidget для создания виджета с использованием этих атрибутов. Другие атрибуты (например, shouldShowPostalCode), похоже, работают нормально, но не тема.
XmlPullParser parser = context.getResources().getXml(R.xml.cardinputattributes);
try {
parser.next();
parser.nextTag();
} catch (Exception e) {
e.printStackTrace();
}
reactContext = context;
AttributeSet attr = Xml.asAttributeSet(parser);
cardMultilineWidget = new CardMultilineWidget(context,attr);
Я загружаю файл ресурсов xml и создаю виджет, используя набор атрибутов. Но по какой-то причине тема в файле ресурсов не вступает в силу.
Вот файлы ресурсов
Файл ресурсов XML
<?xml version="1.0" encoding="utf-8"?>
<com.stripe.android.view.CardMultilineWidget android:id="@ id/cardMultiLineWidget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerVertical="true"
android:theme="@style/CreditCardTheme"
android:imeActionLabel="@string/next_action_string"
app:shouldShowPostalCode="false"
android:padding="5dp"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" />
Это файл с файлом XML-ресурсов Theme — Themes
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:textColor">#FFFFFF</item>
</style>
<style name="CreditCardTheme" parent="StripeBaseTheme">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="android:textColorHint">@color/lightYellow</item>
<item name="android:textColorPrimary">@color/primary</item>
<item name="android:textColorSecondary">@color/primary</item>
<item name="android:textColor">@color/textPrimary</item>
<item name="titleTextColor">@color/title</item>
<item name="colorAccent">@color/accent</item>
<item name="colorControlNormal">@color/accent</item>
<item name="colorControlActivated">@color/lightYellow</item>
<item name="android:editTextColor">@color/textPrimary</item>
<item name="editTextColor">@color/textPrimary</item>
</style>
</resources>
Независимо от того, какую тему или стиль я даю свойству android: theme, это не сработало.
Вот пользовательский интерфейс из приложения.
Скриншот приложения
Я хочу иметь возможность настраивать стиль, например, различные цвета подсветки, цвета текста и т.д. Любая помощь приветствуется. Заранее благодарю вас.
Редактировать: передача темы в качестве атрибута, похоже, не работает. Я использовал файл макета с данным cardmultilinewidget и раздул его программно с помощью LayoutInflater, и это сработало. Спасибо @wsw за то, что указал мне правильное направление.
Комментарии:
1. Можете ли вы попробовать использовать
CreditCardTheme
в активности хостинга вместоCardMultilineWidget
?2. Привет, @wsw, спасибо за комментарий! CardMultilineWidget — это класс, предоставляемый Stripe. Не уверен, что вы имели в виду, используя CreditCardTheme
3. вы определили пользовательскую тему, с именем
CreditCardTheme
которой вы ее сейчас используетеCardMultilineWidget android:theme
. Я имел в виду, что вы должны использовать эту тему в Activity, в котором размещаетсяCardMultilienWidget
if, если это имеет смысл4. Да, это имеет смысл. Я попробовал то, что вы сказали, но, поскольку я использую react native, я не могу изменить действие. Поэтому я добавил файл макета с cardmultilinewidget и применил тему к макету, и это сработало. Спасибо за помощь!
5. @Anorak не могли бы вы опубликовать решение ниже? Так что другие разработчики с такой же проблемой (как и я) могут наслаждаться 🙂