Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom View not giving margin

I am working on an activity where I created a custom view that I am adding dynamically within a LinearLayout. The problem is that I am unable to give margin between the custom views I add.

Here is a look at the two views I added which are next to each other.

Screentshot:

enter image description here

Code for creating the views dynamically:

private void AddSelectedTagUI(final com.main.feedify.serializers.Tags tag){

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.tags,tags_section_selectedtags,false);

    TextView tagName = (TextView)v.findViewById(R.id.customview_tags_name);
    tagName.setText(tag.getTagName());

    ImageView close_button = (ImageView)v.findViewById(R.id.customview_tags_close);

    close_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RemoveTag(tag.getTagID(), selectedTags);
        }
    });

    RelativeLayout.LayoutParams params =  new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

    tags_section_selectedtags.addView(v, params);


    // cast view to tags and add it in our layout.
    // this will help us find out the tag we wanna delete.

    view_selectedTags.add(v);
    this.UpdateMessage(true);
}

tags.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/tags"
    android:padding="5dp"
    android:id="@+id/custom_tag"
    >

    <TextView android:id="@+id/customview_tags_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Beyonce"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="3dp"
        android:layout_centerVertical="true"
        android:textColor="@android:color/white"
        android:textSize="@dimen/title" />

    <ImageView
        android:id="@+id/customview_tags_close"
        android:layout_width="wrap_content"
        android:layout_marginTop="2dp"
        android:layout_toRightOf="@+id/customview_tags_name"
        android:layout_height="wrap_content"
        android:src="@drawable/close"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="10dp"
        />

</RelativeLayout>

activity_tags.xml

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

    <TextView
        android:id="@+id/tags_lbl_taginfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Add at least 4 favorite topics"
        android:layout_marginTop="20dp"
        />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_below="@+id/tags_lbl_taginfo"
        android:layout_width="match_parent"
        android:layout_height="190dp"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:id="@+id/tags_section_selectedtags">




    </LinearLayout>


    <EditText
        android:id="@+id/tags_txt_tags"
        android:layout_below="@+id/tags_section_selectedtags"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="35dp"
        android:hint="Add tags ..."
        android:textColor="@color/tags_edittext"
        android:paddingTop="15dp"
        android:singleLine="true"
        android:paddingLeft="9dp"
        android:paddingBottom="15dp"
        android:background="@drawable/tags_edittext"
        />

    <TextView
        android:id="@+id/tags_lbl_tagsuggestion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Suggestions"
        android:layout_marginTop="15dp"
        android:layout_below="@id/tags_txt_tags"
        />

</RelativeLayout>

Custom Tags Class:

package com.main.feedify.custom_views;

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.main.feedify.feedify_mockup.R;
import com.tokenautocomplete.TokenCompleteTextView;
/**
 * Created by Muazzam on 10/17/2015.
 */
public class Tags extends RelativeLayout{

    private com.main.feedify.serializers.Tags tag;

    public Tags(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        LayoutInflater inflater = LayoutInflater.from(context);
        inflater.inflate(R.layout.tags,this);
    }

    public void setTag(com.main.feedify.serializers.Tags t){
        this.tag = t;
    }

    public com.main.feedify.serializers.Tags getTag(){
        return this.tag;
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        MarginLayoutParams margins = MarginLayoutParams.class.cast(getLayoutParams());
        int margin = 5;
        margins.topMargin = 0;
        margins.bottomMargin = 0;
        margins.leftMargin = margin;
        margins.rightMargin = 0;
        setLayoutParams(margins);
    };
}
like image 369
Mj1992 Avatar asked Oct 25 '15 16:10

Mj1992


People also ask

How do I set custom view margins?

You can specify your own custom margin settings. Click Margins, click Custom Margins, and then in the Top, Bottom, Left, and Right boxes, enter new values for the margins.

What is meant by custom view?

A well-designed custom view is much like any other well-designed class. It encapsulates a specific set of functionality with an easy to use interface, it uses CPU and memory efficiently, and so on. In addition to being a well-designed class, though, a custom view should: Conform to Android standards.


1 Answers

You are setting margins in Pixels. Try converting them into dp, so that the margins value becomes independent of display density.

@Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        MarginLayoutParams margins = MarginLayoutParams.class.cast(getLayoutParams());
        int margin = pxToDp(5);
        margins.topMargin = 0;
        margins.bottomMargin = 0;
        margins.leftMargin = margin;
        margins.rightMargin = 0;
        setLayoutParams(margins);
    };

private int pxToDp(int px) {
         return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

EDIT:

Get rid of the margin code in onLayout() and set those margins, when you are puting this view inside a viewgroup like LinearLayout or RelativeLayout etc.

like image 87
Umer Farooq Avatar answered Oct 12 '22 20:10

Umer Farooq