Android:如何以编程方式从xml中删除对象

时间:2015-06-25 04:48:08

标签: android android-layout android-xml

在我的应用中,我在AdView(垂直)中有一个LinearLayout对象和浮动按钮。我希望当用户购买应用内购买"删除广告" 以从xml中删除AdView对象,以便取消FAB按钮。像这样:

ads

没有广告:

enter image description here

我该怎么做? 那是我的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();
            }

enter image description here

3 个答案:

答案 0 :(得分:2)

要删除您可以使用的任何视图,其中ll是您的父线性布局

ll.removeView(view)// to remove particular view
ll.removeViewAt(position);// to remove view from particular position

或者,您也可以将广告设定的visibility设置为GONE,结果将其放置在按钮上。

adButton.setVisibility(View.GONE);  

修改
在查看了您的XML后,我认为它的重要性正在产生问题 您应该将floatingButton layout_weight设置为100,隐藏adView

floatingButton.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 100f));

修改
我建议不要使用重量,因为你不需要它们。

答案 1 :(得分:1)

如果要动态确定是否要显示视图,则在xml中添加视图是不切实际的。如果您仍想添加添加到xml,则可以使其不可见或分离/删除视图。否则,不要在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();

        }

在代码中以编程方式添加广告视图。在共享偏好设置中存储标记,并根据需要进行设置以显示或删除广告。加载活动时,阅读标记并确定是否将广告视图添加到布局。

对于按钮的大小,您可以将其发送到相对于可用空间,或者根据flag的值调整大小。

答案 2 :(得分:1)

让我们说 youViewName 是您要删除的视图。 如果 LinearLayout 使用下面的代码,否则如果 RelativeLayout 在下面的代码中用 RelativeLayout <替换 LinearLayout / p>

((LinearLayout) youViewName.getParent()).removeView(youViewName);

在您的情况下,下面的行应该有效

((LinearLayout) mAdView.getParent()).removeView(mAdView);