Android:如何以编程方式从 xml 中删除对象
Android: How to Remove an object from xml programatically
在我的应用程序中,我在 LinearLayout
(垂直)中有一个 AdView
对象和 浮动按钮 。我希望当用户购买应用程序内购买时 "Remove ads" 从 xml 中删除 AdView
对象,以便 FAB 按钮将其地方。像这样:
无广告:
我该怎么做?
那是我的 xml 代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:materialdesign="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:id="@+id/myMainRelativeLayout"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include
android:id="@+id/tool_bar"
layout="@layout/tool_bar">
</include>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"
android:background="?android:selectableItemBackground"
android:id="@+id/recyclerView"
android:layout_below="@+id/tool_bar"
/>
<TextView android:id="@+id/list_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No Shopping Items yet"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:weightSum="100"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<com.software.shell.fab.ActionButton
android:id="@+id/buttonFloat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="50"
android:layout_gravity="center"
fab:show_animation="@anim/fab_roll_from_down"
fab:hide_animation="@anim/fab_roll_to_down"/>
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="50"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>
</LinearLayout>
这是我删除广告视图的代码:
mIsRemoveAdds = inventory.hasPurchase(SKU_REMOVE_ADDS);
if(!mIsRemoveAdds) {
Toast.makeText(MainActivity.this,"no premium",Toast.LENGTH_LONG).show();
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}else{
if(mAdView != null) {
mAdView.setVisibility(View.GONE);
}
Toast.makeText(MainActivity.this,"premium",Toast.LENGTH_LONG).show();
}
要删除您可以使用的任何视图,其中 ll
是您的父级线性布局
ll.removeView(view)// to remove particular view
ll.removeViewAt(position);// to remove view from particular position
或者,您也可以将 adView 的 visibility
设置为 GONE
,结果会将其放置在按钮上。
adButton.setVisibility(View.GONE);
编辑:
在查看了您的 XML 之后,我认为是它的重量造成了问题。
您应该在隐藏 adView
的地方将 floatingButton
layout_weight
设置为 100
floatingButton.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 100f));
编辑:
我建议不要使用权重,因为你不需要它们。
xml中的视图如果要动态判断是否显示不实用。如果您仍想添加到 xml,您可以将其设置为不可见或 detach/remove 视图。否则,不要在 Xml 中添加 AdView。我按如下方式处理这种情况:
adView = new MoPubView(this.getApplicationContext());
adView.setAdUnitId(getString(R.string.mopub_banner_adunitid));
adView.refreshDrawableState();
adView.setBannerAdListener(this);
if(!Prefs.getUserPreferenceBooleanValue(Prefs.Key.REMOVE_ADS_PAID, this)) {
frameLayout.addView(adView, bannerViewLayoutParams);
adView.loadAd();
}
在您的代码中以编程方式添加 adview。在共享首选项中存储一个标志,并根据需要设置它以显示或删除广告。当 activity 加载时,读取标志并确定是否将 adview 添加到布局中。
对于按钮的大小,您可以将其发送为相对于可用 space 或根据标志的值调整大小。
假设 youViewName 是您要删除的视图。
如果它是 LinearLayout 使用下面的代码,否则如果它是 RelativeLayout 将下面代码中的 LinearLayout 替换为RelativeLayout
((LinearLayout) youViewName.getParent()).removeView(youViewName);
在您的情况下,下面的行应该有效
((LinearLayout) mAdView.getParent()).removeView(mAdView);
在我的应用程序中,我在 LinearLayout
(垂直)中有一个 AdView
对象和 浮动按钮 。我希望当用户购买应用程序内购买时 "Remove ads" 从 xml 中删除 AdView
对象,以便 FAB 按钮将其地方。像这样:
无广告:
我该怎么做? 那是我的 xml 代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:materialdesign="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:id="@+id/myMainRelativeLayout"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include
android:id="@+id/tool_bar"
layout="@layout/tool_bar">
</include>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"
android:background="?android:selectableItemBackground"
android:id="@+id/recyclerView"
android:layout_below="@+id/tool_bar"
/>
<TextView android:id="@+id/list_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No Shopping Items yet"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:weightSum="100"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<com.software.shell.fab.ActionButton
android:id="@+id/buttonFloat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="50"
android:layout_gravity="center"
fab:show_animation="@anim/fab_roll_from_down"
fab:hide_animation="@anim/fab_roll_to_down"/>
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="50"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>
</LinearLayout>
这是我删除广告视图的代码:
mIsRemoveAdds = inventory.hasPurchase(SKU_REMOVE_ADDS);
if(!mIsRemoveAdds) {
Toast.makeText(MainActivity.this,"no premium",Toast.LENGTH_LONG).show();
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}else{
if(mAdView != null) {
mAdView.setVisibility(View.GONE);
}
Toast.makeText(MainActivity.this,"premium",Toast.LENGTH_LONG).show();
}
要删除您可以使用的任何视图,其中 ll
是您的父级线性布局
ll.removeView(view)// to remove particular view
ll.removeViewAt(position);// to remove view from particular position
或者,您也可以将 adView 的 visibility
设置为 GONE
,结果会将其放置在按钮上。
adButton.setVisibility(View.GONE);
编辑:
在查看了您的 XML 之后,我认为是它的重量造成了问题。
您应该在隐藏 adView
floatingButton
layout_weight
设置为 100
floatingButton.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 100f));
编辑:
我建议不要使用权重,因为你不需要它们。
xml中的视图如果要动态判断是否显示不实用。如果您仍想添加到 xml,您可以将其设置为不可见或 detach/remove 视图。否则,不要在 Xml 中添加 AdView。我按如下方式处理这种情况:
adView = new MoPubView(this.getApplicationContext());
adView.setAdUnitId(getString(R.string.mopub_banner_adunitid));
adView.refreshDrawableState();
adView.setBannerAdListener(this);
if(!Prefs.getUserPreferenceBooleanValue(Prefs.Key.REMOVE_ADS_PAID, this)) {
frameLayout.addView(adView, bannerViewLayoutParams);
adView.loadAd();
}
在您的代码中以编程方式添加 adview。在共享首选项中存储一个标志,并根据需要设置它以显示或删除广告。当 activity 加载时,读取标志并确定是否将 adview 添加到布局中。
对于按钮的大小,您可以将其发送为相对于可用 space 或根据标志的值调整大小。
假设 youViewName 是您要删除的视图。 如果它是 LinearLayout 使用下面的代码,否则如果它是 RelativeLayout 将下面代码中的 LinearLayout 替换为RelativeLayout
((LinearLayout) youViewName.getParent()).removeView(youViewName);
在您的情况下,下面的行应该有效
((LinearLayout) mAdView.getParent()).removeView(mAdView);