Top border on a LinearLayout with transparent background - android

I am trying to add a top border to a LinearLayout with a transparent background.
The result should be like the following image, where the border is the top border of the "Jp Project" LinearLayout. The background color comes from a FrameLayout who is used as container.
This is the linear layout XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/menuItem"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<ImageView
android:id="#+id/icon"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="#drawable/notification_action"
android:padding="10dp"/>
<TextView
android:id="#+id/menuItemName"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:textSize="19sp"
android:textColor="#color/white"/>
<TextView android:id="#+id/counter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:textAppearance="#android:style/TextAppearance.Medium"
android:textColor="#color/counter_text_color"
android:background="#drawable/counter_bg"/>
</LinearLayout>
This is the style code I am using at the moment:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:width="2dp"
android:color="#color/base_app_color" />
<solid android:color="#android:color/transparent"/>
</shape>
Which draws:
Have you got any way to fix it just using styles?

Set as your LinearLayout background the drawable with this code:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="-2dp" android:bottom="-2dp" android:right="-2dp">
<shape android:shape="rectangle">
<stroke android:width="2dp" android:color="#color/borderColor" />
<solid android:color="#color/backgroundColor" />
</shape>
</item>
</layer-list>

As the line should be middle aligned vertically between the Workplaces and Project menu items. I am identifying the Project item as an especial menu item and applying a different layout.
The layout code is:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:background="#drawable/project_top_line">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<ImageView
android:id="#+id/icon"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="#drawable/notification_action"
android:padding="10dp"/>
<TextView
android:id="#+id/menuItemName"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:textSize="19sp"
android:textColor="#color/white"/>
<TextView android:id="#+id/counter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:textAppearance="#android:style/TextAppearance.Medium"
android:textColor="#color/counter_text_color"
android:background="#drawable/counter_bg"/>
</LinearLayout>
</LinearLayout>
The style code is:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:width="2dp"
android:color="#color/base_app_color" />
<solid android:color="#android:color/transparent"/>
</shape>
which draws a line in the middle of the first linear layout.

I think you only need a blue line so you can do something like this:
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#android:color/holo_blue_dark" />

Make a file called border.xml and add this to your layout for making only top border.
<item
android:left="-1dp"
android:right="-1dp"
android:bottom="-1dp"
android:top="1dp">
<shape
android:shape="rectangle">
<stroke
android:width="0.5dp"
android:color="#color/black" />
<solid android:color="#android:color/transparent" />
</shape>
</item>
like this:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="#+id/kellton_logo"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="#drawable/border"
>
Helped for me.

Related

how to create android linearlayout cornar crap color?

I am new android devloper..
I want to do android linearlayout cornar crap color. I tried. I did not get the corner grab I saw. Below is my silk to give my linearlayout.
LinearLayout
<LinearLayout
android:orientation="horizontal"
android:background="#color/gnt_ad_green"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:weightSum="4.0">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="Intergiration"
android:drawableLeft="#drawable/ic_filter"
android:drawablePadding="10.0dip"
android:gravity="center|left"
android:padding="15.0dip"
android:textColor="#color/colorWhite"
android:textSize="16.0sp" />
<LinearLayout
android:background="#color/colorBackgroundLight"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="3.0">
<TextView android:textSize="12.0sp"
android:textColor="#color/colorPrimary"
android:gravity="center"
android:text="sdfsdf gd"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</LinearLayout>
I want a design like this
simple image
You can try this
rect_background.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="#F00" />
</shape>
</item>
<item>
<rotate
android:fromDegrees="110"
android:pivotX="90%"
android:pivotY="90%"
>
<shape android:shape="rectangle" >
<solid android:color="#FFF" />
</shape>
</rotate>
</item>
</layer-list>
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<View
android:layout_width="200dp"
android:layout_height="50dp"
android:background="#drawable/rect_background"/>
</LinearLayout>
maybe you have to use the image for this (add an image which contains a shape like this) and set this image as a background of your linear layout.

I need to create this kind of button

https://drive.google.com/open?id=1yOkIr0uu6iqwjin2_H00K7gkP_f7g1_r
please help me how to create that kinda button with red color shadow
You just have to use CardView for this kind shadow background
add below library
implementation 'com.android.support:design:26.1.0' //support design
compile 'com.android.support:cardview-v7:26.1.0' // CardView
in your xml layout declare cardview
<android.support.v7.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
card_view:cardBackgroundColor="#C8242A"
card_view:cardCornerRadius="15dp"
card_view:cardElevation="10dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="#style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5dp"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:paddingTop="5dp"
android:text="Sign in"
android:textColor="#fff" />
</LinearLayout>
</android.support.v7.widget.CardView>
Try this
<?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"
android:orientation="vertical"
android:gravity="center"
tools:context=".activity.SplashActivity">
<Button
android:layout_width="match_parent"
android:background="#drawable/aa"
android:layout_height="wrap_content" />
</LinearLayout>
android:background="#drawable/aa"
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="#drawable/shadow_bg" >
</item>
<item>
<shape android:shape="rectangle" android:padding="10dp">
<corners android:radius="40dp" />
<gradient
android:angle="45"
android:endColor="#3cff00"
android:startColor="#ff00ff"
android:type="linear" />
<padding
android:bottom="0dp"
android:left="0dp"
android:right="0dp"
android:top="0dp" />
</shape>
</item>
</layer-list>
android:drawable="#drawable/shadow_bg"
OUTPUT
NOTE: You can use Android 9-patch shadow generator to create 9-patch image as per requirement

What's wrong with this layout that's causing the elevation shadow not to appear?

I'm trying to use Android Elevation to achieve the 'shadow' look for a view. The following is the layout xml:
<android.support.constraint.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="com.sample.app.Main2Activity">
<LinearLayout
android:layout_width="395dp"
android:layout_height="match_parent"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:clipChildren="false">
<TextView
android:id="#+id/textView2"
android:layout_width="match_parent"
android:layout_height="165dp"
android:background="#FFFFFF"
android:padding="30dp"
android:layout_margin="30dp"
android:elevation="10dp"
android:text="TextView" />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
This is how the layout looks:
Look ma, no shadows!
Any suggestions to fix this?
Here you go.... maybe you need someone to do it for you then....
I used a card view instead...
xml layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:id="#+id/card_view"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:layout_gravity="center"
android:layout_margin="5dp"
card_view:cardCornerRadius="5dp"
card_view:contentPadding="10dp">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="#+id/textView"
android:text="hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:textStyle="bold"/>
<TextView
android:id="#+id/textView2"
android:text="world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="#+id/textView"
android:layout_marginTop="10dp"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
Add these to your app gradle file
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:cardview-v7:25.1.0'
result:
and if you dont want to use a card view.....
xml -> layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#drawable/border"
android:layout_margin="5dp"
android:padding="5dp">
<TextView
android:id="#+id/textView"
android:text="hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:textStyle="bold"/>
<TextView
android:id="#+id/textView2"
android:text="world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="#+id/textView"
android:layout_marginTop="10dp"/>
</RelativeLayout>
</LinearLayout>
#drawable/border
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Drop Shadow Stack -->
<item>
<shape>
<gradient
android:centerColor="#D5E2ED"
android:endColor="#0000"
android:angle="90"/>
</shape>
</item>
<item android:bottom="10dp">
<shape>
<solid android:color="#D5E2ED"/>
</shape>
</item>
<!-- base background -->
<item android:bottom="5dp" android:top="1dp">
<shape android:shape="rectangle">
<solid android:color="#fff"/>
<padding android:bottom="10dp" android:top="10dp"/>
</shape>
</item>
</layer-list>
result:
happy coding....
I'll get to the answer, but some background first. I was trying to achieve the look with a custom view that used a ConstraintLayout. This view would be used in another layout. I was when I tried using a simple TextView that I realised that the shadows weren't being rendered because, thus destroying my assumption that it was something ConstraintLayout related.
What worked?
I know, from the documentations, that shadows and rendered using a View's background. This, I have, and indeed, it was a solid color with no alpha value (as others on SO have mentioned).
Much like so:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
It was after I added android:radius to this, and then the shadows were rendered.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" />
<corners android:radius="1dp" />
</shape>
And if you were wondering, why not set it to 0dp? Well, the shadows disappear again when the radius values were set to 0dp.

Error in right and bottom border to imageView

I have a ImageView and I want to set a rounded border, I have it with a drawable shape but at the right and bottom, the border its not correct, I set a screenshot for understand this:
This is the XML code:
<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/rl"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:id="#+id/et_message"
android:layout_toRightOf="#+id/rl_bt_s"
android:layout_toEndOf="#+id/rl_bt_s"
android:layout_toStartOf="#+id/send_bt_c"
android:layout_toLeftOf="#+id/send_bt_c"
android:layout_centerVertical="true"
android:layout_height="wrap_content"/>
<RelativeLayout
android:id="#+id/rl_bt_s"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="#id/et_message"
android:padding="6dp"
android:gravity="center">
<ImageButton
android:id="#+id/bt_chat_s"
android:layout_width="36dp"
android:layout_height="36dp"
android:padding="10dp"
android:background="#android:color/transparent"
android:clickable="false"/>
<ImageView
android:id="#+id/iv_action_attach"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_alignLeft="#id/bt_chat_s"
android:layout_alignStart="#id/bt_chat_s"
android:src="#drawable/icon_input_plus"
android:background="#drawable/chat_attachment_border_smsmode"/>
</RelativeLayout>
</merge>
And this is the shape:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<stroke android:width="1dp"
android:color="#999999"
/>
<padding android:left="4dp"
android:top="4dp"
android:right="4dp"
android:bottom="4dp"
/>
<corners android:radius="4dp"/>
</shape>
As you can see in the screenshot, the right border and bottom border its not completely but I don't know why.
Try changing the parent RelativeLayout to have the width you desire and have the child views match_parent for their width/height.
<RelativeLayout
android:id="#+id/rl_bt_s"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_alignBottom="#id/et_message"
android:gravity="center">
<ImageButton
android:id="#+id/bt_chat_s"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:background="#android:color/transparent"
android:clickable="false"/>
<ImageView
android:id="#+id/iv_action_attach"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="#drawable/icon_input_plus"
android:background="#drawable/chat_attachment_border_smsmode"/>
</RelativeLayout>

Vertical Line and a circular view

I am trying to get a vertical line in-between ImageViews to showcase a flow.
Here is what I am trying to achieve,
Here is what I have now
Background
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="44dp">
<shape android:shape="rectangle">
<solid android:color="#android:color/darker_gray" />
<padding android:left="1dp" />
</shape>
</item>
<item android:left="44dp">
<shape android:shape="rectangle">
<solid android:color="#android:color/white" />
</shape>
</item>
</layer-list>
Item Layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#drawable/progress_item_bg"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:src="#drawable/circle"
android:layout_weight="20"
android:layout_width="0dp"
android:layout_height="match_parent" />
<TextView
android:id="#+id/label"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="80"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingStart="10dp"
android:text="Group" />
</LinearLayout>
Is there a better way to do this ?
Is there a better way to do this Yes.
You can use a TextView to include the left Image, and save yourself a View for every row, by simply using a compound drawable:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#drawable/progress_item_bg"
android:padding="10dp"
>
<TextView
android:id="#+id/label"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawableLeft="#drawable/circle"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingStart="10dp"
android:text="Group"
/>
</RelativeLayout>
To set the drawable via code, use setCompundDrawablesWithIntrinsicBounds(): http://developer.android.com/reference/android/widget/TextView.html#setCompoundDrawablesWithIntrinsicBounds(int, int, int, int)
You might also want to add some top and bottom margin to the vertical line and make the background color transparent, instead of white (so you can use it also on a dark container background color).

Categories

Resources