2

Android 앱에서 사용자 정의 너비가있는 UI 요소가 있습니다. UI 요소는 본질적으로 두 개의 녹색 원이있는 블록입니다. 하나는 왼쪽 블록의 원이고 다른 하나는 블록 오른쪽 원입니다.Android : LayoutParams를 사용하여 View 객체의 너비 설정

전체 UI 요소의 너비를 프로그래밍 방식으로 설정할 수 있기를 원합니다. 원은 항상 일정한 크기 여야하며 중간에있는 블록은 나머지 공간을 채우기 위해 크기가 지정되어야합니다. 나는 때문에 위의 코드에서 RelativeLayout의를 사용하고

int layoutLeft = block_x_position - green_circle_width; 
int layoutWidth = block_width + (green_circle_width * 2); 

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(layoutWidth, block_height); 
layoutParams.setMargins(layoutLeft, block_y_position, 0, 0); 
this.setLayoutParams(layoutParams); 

this.requestLayout(); 

:

<?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="horizontal" > 

    <View 
     android:background="@drawable/green_circle" 
     android:id="@+id/left_green_circle" 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
    /> 

    <View 
     android:background="@drawable/blue_rectangle" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
    /> 

    <View 
     android:background="@drawable/green_circle" 
     android:id="@+id/right_green_circle" 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
    /> 

</LinearLayout> 

나는 다음과 같은 코드의보기의 레이아웃 매개 변수를 설정 : 여기

내가 현재 가지고있는 것입니다 이 전체 View 요소의 부모는 RelativeLayout입니다. 불행히도, 나는 기대했던 결과를 얻지 못하고있다. 내 "block_width"변수는 "40dp"이고 내 "green_circle_width"변수는 "20dp"입니다. 내가 대신 내보기 XML에서 "match_parent"의 "wrap_content"를 사용하여 시도했다

enter image description here

하지만은 전혀 영향이없는 : 여기에 내가 무엇입니까 것입니다. 내 블록이 너비를 넘어서 확장되는 이유는 무엇입니까?

도움 주셔서 감사합니다.

+0

오른쪽에 약간의 패딩은 어때요? – bluejamesbond

답변

1

녹색 원 이미지 (jpg 또는 png)의 너비가 20dp보다 커서 (내가 상상할 수 있음) 원이 잘린 것을 볼 수 있습니다. 녹색 원의 크기를 조절하려면 imageView를 사용하고 scaleType 속성을 설정하십시오.

그렇지 않으면 원하는 것을 정확하게 얻을 수 있습니다. 원 뷰를 20dp로 강제 설정하면 블록을 채울 수있는 추가 공간이 많이 생깁니다. 원의 너비를 올바르게 설정하거나 scaleType을 사용하면 효과가 있습니다.

제쳐두고 블록의 너비로 match_parent를 사용하면 안됩니다 (원이 차지하는 공간을 포함하여 전체 너비를 차지한다는 의미입니다). 대신 임의의 너비 (예 : 0dp)를 사용하고 layout_weight를 1로 설정하십시오.

+0

나는 원이 잘린 사실보다 사각형 블록에서 보게되는 여분의 너비가 더 걱정됩니다. 직사각형 블록이 측정 된 너비의 경계에서 벗어나 있기 때문에 원이 잘립니다. 나는 단순히 파란색 블록이 녹색 원이 차지하지 않는 모든 공간을 차지하기를 원합니다. – David

+0

죄송합니다. 덧글 1 개 : 녹색 원은 이미지가 아닙니다. 그들은 다음과 같이 정의 된 XML 드로어 블 셰이프입니다. <구배 로이드 : 각도 = "270" 로이드 : 때문에 StartColor = "# 82b446" 로이드 : endColor = "#의 658d47"/> <스트로크 로이드 : 가로 = "1DP" android : color = "# 658d47"/> 그래서 모양을 독립적으로 정의한 다음 이전에 게시 한 XML에서 해당 모양을 사용하고 크기를 지정합니다. – David

+0

아, 고쳐 주셔서 감사합니다.세 가지보기를 모두 레이아웃 가중치 1로 설정하고 싶지는 않습니다. 즉, 모두가 동일한 너비가되도록하려는 것입니다. 블록을 layout_weight가 1로 설정하고 서클을 가중치가없는 크기로 설정하면됩니다. 이것을 시도해보고 (블록 폭을 fill_parent가 아닌 다른 것으로 설정하십시오). –