Android中PayPal PaymentButtonContainer膨胀失败问题求助
问题概述
集成PayPal Checkout Android SDK 0.8.1(minSdk=21),布局中引入com.paypal.checkout.paymentbutton.PaymentButtonContainer控件后,启动PaymentPayPal Activity时触发视图膨胀错误,尝试视图绑定未解决。
相关代码
布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.payment.PaymentPayPal"> <com.paypal.checkout.paymentbutton.PaymentButtonContainer android:id="@+id/paymentButtonContainer" android:layout_width="match_parent" android:layout_height="@dimen/_50dp" android:layout_margin="@dimen/_30dp" app:layout_constraintTop_toTopOf="parent"/> </LinearLayout>
Activity代码
class PaymentPayPal : BaseActivity() { private val YOUR_CLIENT_ID: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_payment_pay_pal) } }
错误信息
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.voterswik/com.voterswik.ui.payment.PaymentPayPal}: android.view.InflateException: Binary XML file line #9 in com.voterswik:layout/activity_payment_pay_pal: Binary XML file line #9 in com.voterswik:layout/activity_payment_pay_pal: Error inflating class com.paypal.checkout.paymentbutton.PaymentButtonContainer
解决步骤
1. 补全PayPal SDK初始化流程
PayPal Checkout控件依赖SDK初始化配置,当前代码缺少初始化步骤,这是膨胀失败的核心原因。需在onCreate中先初始化SDK:
import com.paypal.checkout.PayPalCheckout import com.paypal.checkout.config.CheckoutConfig import com.paypal.checkout.config.Environment class PaymentPayPal : BaseActivity() { private val YOUR_CLIENT_ID: String = "你的PayPal客户端ID" // 需填写有效ID override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化PayPal Checkout配置 PayPalCheckout.setConfig( CheckoutConfig( application = application, clientId = YOUR_CLIENT_ID, environment = Environment.SANDBOX // 生产环境用Environment.PRODUCTION ) ) setContentView(R.layout.activity_payment_pay_pal) } }
2. 修正布局属性冲突
布局根容器为LinearLayout,但使用了仅ConstraintLayout支持的app:layout_constraintTop_toTopOf属性,导致属性解析错误。二选一修正:
- 方案一:改为ConstraintLayout根容器
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.payment.PaymentPayPal"> <com.paypal.checkout.paymentbutton.PaymentButtonContainer android:id="@+id/paymentButtonContainer" android:layout_width="match_parent" android:layout_height="@dimen/_50dp" android:layout_margin="@dimen/_30dp" app:layout_constraintTop_toTopOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
- 方案二:移除ConstraintLayout专属属性
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".ui.payment.PaymentPayPal"> <com.paypal.checkout.paymentbutton.PaymentButtonContainer android:id="@+id/paymentButtonContainer" android:layout_width="match_parent" android:layout_height="@dimen/_50dp" android:layout_margin="@dimen/_30dp"/> </LinearLayout>
3. 验证依赖配置
确认build.gradle(Module: app)中正确引入SDK依赖:
implementation 'com.paypal.checkout:android-sdk:0.8.1'
同时确保minSdkVersion设置为21,无依赖冲突。
4. 清理重建项目
执行Android Studio的Clean Project → Rebuild Project操作,清除编译缓存后重新构建项目。
内容的提问来源于stack exchange,提问作者Rishabh Garg

