프로그래밍 언어/Java

Android setHeight error 해결방법 (java에서 xml height 속성 변경하기)

happy_life 2021. 10. 11. 10:41

 

<XML> 코드
<TextView
            android:id="@+id/TextView_won"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="원"
            style="@style/TextSize"
            android:gravity="center"
            android:layout_alignParentRight="true"
            />

 

에서 클릭시 height를 "40dp"로 바꿔주고 싶어서

다음과 같이 java코드를 작성하였으나 바뀌지 않음

 

<java>코드

public class MainActivity extends AppCompatActivity {

    TextView TextView_won;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    TextView_won = findViewById(R.id.TextView_won);

    TextInputEditText_capital.setClickable(true); //clickable 하게 만들었음
    TextInputEditText_capital.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View view) {
          
        TextView_won.setHeight(40);


        }
    });

    }
}

해결방법
Layoutparams사용하기
(java에선 dp를 바꾸지 못하고 pixel을 기준으로 변경이 가능하다고 함
따라서 LayoutParams를 써야함)

public class MainActivity extends AppCompatActivity {
    TextInputEditText TextInputEditText_capital;
    TextView TextView_won;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextInputEditText_capital = findViewById(R.id.TextInputEditText_capital);
        TextView_won = findViewById(R.id.TextView_won);


        TextInputEditText_capital.setClickable(true); //clickable 하게 만들었음

        TextInputEditText_capital.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("SENTI","On click"); //click 찍히는지 확인

                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) TextView_won.getLayoutParams();
                params.height = (int) getResources().getDimension(R.dimen.TextView_height);
               TextView_won.setLayoutParams(params);
               
            }
        });
   }
}

(1)

RealativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) Textview_won.getLayoutParams();

로 params 객체를 생성하고 Textview_won의 LayoutParams()를 넣어줌

 

 

(2) 

params.height = (int) getResources().getDimension(R.dimen.TextView_height);

 

이 코드는 Resource에 있는 Dimension 의 dimen에 TextView_height라는 값을 가져와 

아까 생성한 params 객체의 height 속성에 값을 넣어주는 것이다.

(이를 위해 res->values에 dimens.xml을 만들고 거기에 TextView_height의 값을 설정해주었다)

 

 

(3)
TextView_won.setLayoutParams(params);

 

이후 set 해준다.