1. String 문자열 파일 xml로 관리하기
다국어 지원을 하거나, 문자열의 관리를 쉽게 한다.
/app/res/values/string.xml 에 문자열을 정의함. |
@string/... 과 같은 형식으로 참조한다. |
cf) 다국어 문자열 파일 관리 방법
Android 폴더 보기 형식에서는 아래와 같은 구조를 확인할 수 없으므로 상단에서 Project Files로 변경하면 아래와 같은 구성이 보인다.
values-en, values-ko 처럼 values 뒤에 로케일을 붙여서 폴더를 생성하고 string.xml파일을 각 나라의 언어로 정의하면 된다. 기본 폴더인 values는 삭제하지 않는다. 단말에 설정된 언어에 해당하는 파일이 없는 경우 기본 폴더를 참조하기 때문이다. |
2. 텍스트 뷰의 속성
-textColor : 텍스트 색상 설정
#AARRGGBB 의 형태
Alpha: 투명도, FF(투명하지 않음), 88(중간), 00(투명함)
Red: 빨강
Green: 초록
Blue: 파랑
Alpha: 투명도, FF(투명하지 않음), 88(중간), 00(투명함)
Red: 빨강
Green: 초록
Blue: 파랑
-textStyle : 텍스트 스타일 설정
normal|bold|italic 와 같이 | 파이프라인을 이용하여 여러 속성을 함께 지정할 수 있다.
-typeFace : 문자열의 폰트 설정
-maxLines : 텍스트 뷰에서 표시하는 만주열의 최대 줄 수를 설정
maxLines을 1로 지정하고 한줄을 초과하는 text를 작성해본다. |
maxLines이 1이므로 한 줄로 표시된다. |
-selectAllOnFocus : true/false 로 포커스를 받을 때 문자열 전체가 선택 여부
-cursorVisible : true/false 로 커서 보임 여부
-autoLink : true/false 로 웹페이지 주소나, 이메일 주소를 링크 색상으로 표시
-lineSpacingMultiplier : 줄 간격을 기본 줄 간격의 배수로 설정
-lineSpacingExtra : 여유 값으로 설정할 때 사용
-capitalize : 글자, 단어, 문장 단위로 대소문자 조절
-ellipsize : 줄임 표시 관련 속성
-editable : 편집 가능 관련 속성
3. 버튼 속성
버튼은 텍스트뷰를 상속하여 정의되어 있으므로 텍스트뷰의 속성을 그대로 사용할 수 있다.
4. 에디트 텍스트 속성
-hint : 기본 안내문의 hint 표시
-inputType : 입력되는 글자의 유형을 정의할 수 있다. 글자를 입력할 때 보이는 키패드의 유형을 정의할 수 있다.
에디트텍스트 속성 추가하기 |
커서가 깜박이며 아래 글자키패드가 보여진다. |
5. 이미지를 해상도에 따라 다르게 보여주기
/app/res 하위에 drawable 디렉토리를 아래와 같이 추가로 생성해주고 알맞은 이미지를 넣는다.
/app/res/drawable : 일반적으로 사용하는 기본 이미지
/app/res/drawable-xhdpi : 초고해상도
/app/res/drawable-hdpi : 고해상도
/app/res/drawable-mdpi : 중간해상도
/app/res/drawable-ldpi : 저해상도
/app/res/drawable-xhdpi : 초고해상도
/app/res/drawable-hdpi : 고해상도
/app/res/drawable-mdpi : 중간해상도
/app/res/drawable-ldpi : 저해상도
6. 드로어블 만들기
드로어블은 뷰에 설정할 수 있는 객체이며, 그 위에 그래픽을 그릴 수 있다.
드로어블은 XML 파일이나 소스 파일로 작성할 수 있다.
drawable 폴더 안에 이미지가 아닌 XML 파일이 들어가서 이미지처럼 설정된다.
* 상태 드로어블 만들기
res/drawable 폴더를 우클릭 한 후 [Drawable resource file] 을 클릭 |
file name을 지정하고 OK. |
selector 안에 item 요소를 추가한다. 버튼이 눌린 이미지에는 state_pressed를 true로 설정하여 버튼이 눌렸을때 눌린 이미지가 나오도록 설정한다. 그 다음줄에 아무런 상태가 설정되어 있지 않은 item은 버튼에서 손을 땐 기본 상태이며 finger 이미지가 나오게 된다. |
그리고 버튼의 background 속성에 @drawable/xml파일명 을 적어서 연결하면 클릭했을때 이미지가 변하는 버튼으로 설정된다. |
* 셰이프 드로어블 만들기
shape 로 바꾸고 모양을 사각형으로 설정하고 디자인 요소를 설정한다. 이것을 버튼의 background 에 @drawable/xml파일명으로 설정해주면 된다. |
* 배경 그라데이션 드로어블 만들기
그라데이션을 주려면 gradient 속성을 이용하면 된다. |
* 드로어블을 이용하여 테두리만 있는 버튼 만들기
layer-list 안에 item 태그를 여러개를 넣을 수 있으며 그래픽을 중첩시켜서 표현 할 수도 있다. |
위에서 작성한 드로어블들이 반영된 모습 |
7. 토스트, 스낵바, 대화상자 만들기
- 토스트 메시지 위치 변경 시키기
public class MainActivity extends AppCompatActivity {
EditText editText;
EditText editText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
editText2 = findViewById(R.id.editText2);
}
public void onButton1Clicked(View v){
try{
Toast toastView = Toast.makeText(this, "위치가 바뀐 토스트 메시지 입니다.",
Toast.LENGTH_LONG);
//위치값을 에디트텍스트에서 값을 받아와서,
int xOffset = Integer.parseInt(editText.getText().toString());
int yOffset = Integer.parseInt(editText2.getText().toString());
//setGravity() 를 이용하여 토스트 위치를 바꿔준다.
toastView.setGravity(Gravity.TOP|Gravity.TOP, xOffset, yOffset);
toastView.show();
}catch (NumberFormatException e){
e.printStackTrace();
}
}
}
토스트 메시지의 위치가 입력한 위치에 맞춰 나타난다. |
-토스트 메시지 모양 바꿔 보여주기
public void onButton2Clicked(View v){
//LayoutInflater 객체를 이용해 XML 로 정의된 레이아웃을 메모리에 객체화 함
LayoutInflater inflater = getLayoutInflater();
//layout 폴더의 toastborder.xml 파일의 toast_layout_root 아이디를 가져옴
View layout = inflater.inflate(R.layout.toastborder,
(ViewGroup) findViewById(R.id.toast_layout_root));
//View 객체에서 아이디가 text 인 텍스트뷰 객체를 가져옴
TextView text = layout.findViewById(R.id.text);
Toast toast = new Toast(this);
text.setText("모양 바꾼 토스트");
toast.setGravity(Gravity.CENTER, 0, -100);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
}
/app/layout/toastborder.xml |
/app/drawable/toast.xml |
- Snackbar(스낵바) 보여주기
간단한 메시지를 보여줄 때 토스트 대신 스낵바를 사용하는 경우도 많다.
스낵바는 외부 라이브러리로 추가 되었기 때문에 스낵바가 들어있는 디자인 라이브러리를 프로젝트에 추가해야 사용할 수 있다.
* 외부 라이브러리 추가하기
[File] -> [Project Structure] 클릭 |
좌측 Dependency 메뉴를 클릭 한 후 app을 선택. (안드로이드 스튜디오 3.5.1버전 화면) 우측에 + 버튼을 클릭하여 Library Dependency 를 선택한다. |
스낵바에서 사용하는 외부라이브러리를 검색 하고 버전을 선택 후 OK 클릭 |
그러면 라이브러리가 추가된 것이 보이고 OK 하면 프로젝트가 재빌드 되면서 해당 라이브러리를 사용할 수 있게 된다. |
public void onButton3Clicked(View v){
Snackbar.make(v, "스낵바입니다..~", Snackbar.LENGTH_LONG).show();
}
버튼을 클릭했을 때 하단에 스낵바 생성됨 |
- 알림 대화 상자(Dialog) 보여주기
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
showMessage();
}
});
}
private void showMessage(){
//다이얼로그 빌더를 이용하여 다이얼로그 객체를 생성
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//알림창 제목
builder.setTitle("안내");
//알림창 내용
builder.setMessage("종료하시겠습니까?");
//아이콘 설정
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String message = "예 버튼이 눌렸습니다";
textView.setText(message);
}
});
builder.setNeutralButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String message = "취소 버튼이 눌렸습니다.";
textView.setText(message);
}
});
builder.setNegativeButton("아니오", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String message = "아니오 버튼이 눌렸습니다";
textView.setText(message);
}
});
//대화 상자 객체를 만든다.
AlertDialog dialog = builder.create();
//대화 상자를 화면에 보여준다.
dialog.show();
}
}
버튼을 클릭했을때 알림창이 뜬다. |
8. 프로그레스바 (상태 진행바) 만들기
어떤 일의 진행 상태를 보여주기 위해 프로그레스바를 만든다.
public class MainActivity extends AppCompatActivity {
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//프로그레스바에 현재 상태값 설정하기
ProgressBar progressBar = findViewById(R.id.progressBar);
//setIndeterminate을 true 로 하게 되면 프로그레스바 진행 움직임 애니메이션이 무한정 나오게 된다.
// 이를 false로 하여 80이라는 값을 정지 상태로 보여주기로 한다
progressBar.setIndeterminate(false);
progressBar.setProgress(80);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
dialog = new ProgressDialog(MainActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage("데이터를 확인하는 중입니다.");
dialog.show();
}
});
Button button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//프로그레스 대화상자 없애기
if(dialog != null){
dialog.dismiss();
}
}
});
}
}
스피너가 계속 돌아가면서 프로그레스 다이얼로그를 보여준다. 또한 상단에 빨간 선으로 80까지 상태 값이 표시되고 있다. 이 코드에서는 닫기 버튼으로 프로그레스 대화상자를 없앨수 없다. |
댓글 없음:
댓글 쓰기