setVisibility를 사용해보자

Posted by ITPangPang
2016. 4. 21. 00:00 안드로이드(android)/View


setVisibility를 사용해보자



- setVisibility를 사용하면 View나 위젯, 레이아웃등을 숨기거나 없애거나 다시보이게 할 수 있다.


setVisibility는 사용법이 아주 쉽고 실제로도 활용이 많이 된다.





일단 버튼 3개를 생성해봅니다.


[activity_main.xml]

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<Button
android:id="@+id/btn_invisible"
android:text="Invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_gone"
android:text="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_visible"
android:text="visible"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>




뭐 이런 모양이고


각각 버튼을 클릭하면

Invisible, gone, visible이

실행되도록 

코드를 짜보겠습니다.


[MainActivity.java]

public class MainActivity extends ActionBarActivity
{
Button btn_gone;
Button btn_invisible;
Button btn_visible;

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

private void setup()
{
btn_gone = (Button)findViewById(R.id.btn_gone);
btn_invisible = (Button)findViewById(R.id.btn_invisible);
btn_visible = (Button)findViewById(R.id.btn_visible);

btn_gone.setOnClickListener(myListener);
btn_invisible.setOnClickListener(myListener);
btn_visible.setOnClickListener(myListener);
}

View.OnClickListener myListener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btn_gone :
v.setVisibility(View.GONE);
break;

case R.id.btn_invisible :
v.setVisibility(View.INVISIBLE);
break;

case R.id.btn_visible :
btn_gone.setVisibility(View.VISIBLE);
btn_invisible.setVisibility(View.VISIBLE);

break;
}
}
};
}

간단한 코드입니다.

단어뜻 그대로


VISIBLE(보이고),

INVISIBLE(안보이고),

GONE(없어진)

느낌 그대로입니다.


살짝 추가설명이 

필요한 부분은

INVISIBLE과 GONE의 차이입니다.


INVISIBLE은 눈에 안보일뿐

공간차지를 합니다.


GONE은 아에 사라져서

공간차지를 안하게 됩니다.


INVISIBLE과 GONE을 눌렀을때 차이를 보겠습니다.



INVISIBLE 눌렀을때


버튼이 사라지긴 했지만

공간은 남아있습니다.



GONE 눌렀을때

버튼과 공간 둘다 사라짐으로

인하여 VISIBLE 버튼이

위로 올라오게 되었습니다.



다음은 setVisibility를 

약간 Switch형식으로

쓰는방법을 알아보겠습니다.

뭐 이미지라던가 

어떤 뷰를 사라지게 했다 없앴다 

하는 느낌으로~

[activity_main.xml]

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<Button
android:id="@+id/btn_switch"
android:text="Switch"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ratingBar"
android:layout_gravity="center_horizontal" />

</LinearLayout>


뭐를 넣을까 하다가

RatingBar 별모양이 

이뻐보여서 선택했습니다.



Switch 버튼 하나로

저 별을 없앴다 보였다가

제어해보겠습니다.


public class MainActivity extends ActionBarActivity
{
Button btn_switch;
RatingBar ratingBar;

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

private void setup()
{
ratingBar = (RatingBar)findViewById(R.id.ratingBar);
btn_switch = (Button)findViewById(R.id.btn_switch);
btn_switch.setOnClickListener(myListener);
}

View.OnClickListener myListener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
ratingBar.setVisibility(ratingBar.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
}
};
}


뭐 볼건 저 빨간줄 하나입니다.


버튼을 클릭했을때


별을 getVisibility로 상태를 얻어와서

VISIBLE 상태이면 GONE을 시키고

아니면(GONE상태) VISIBLE 시켜라.


이런 코드입니다..

짧으면서도 유용한 코드이죠


여기서 핸들러만 추가해주면

원하는 만큼 

깜빡깜빡 이는것처럼 효과도 가능하겠죠?