Android Studio를 활용한 안드로이드 프로그래밍 P264 직접 풀어보기 6-3


탭호스트를 이용하여 동물 선택 앱을 작성하라.


- 탭 위젯을 아래쪽에 배치하고 탭은 4개가 나오게한다.

- 프레임레이아웃 안에 리니어레이아웃이아닌 이미지뷰를 배치한다.

HINT: 프레임레이아웃의 layout_weight 속성을 1로한다.




XML코드

탭 위젯을 아래에 배치하려면 탭위젯 코드문의 위치를 프레임레이아웃코드 위에서 아래로 바꿔야합니다.

그런데, 이렇게만하고 실행하면 위젯이 보이지않습니다. (즉, 짤립니다.)

탭 위젯을 정상적으로 아래쪽에 배치하려면 힌트를 이용해야합니다.

프레임레이아웃안의 layout_weight속성을 1로 작성하면 탭위젯을 아래에 배치할 수 있습니다.

(이유는 모르겠는데 이런 형식을 이용할 때 거의 필수옵션이라고합니다.)

<?xml version="1.0" encoding="utf-8"?>
<TabHost 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:id="@android:id/tabhost">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/tabcontent"
>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/RAB"
android:src="@drawable/rab"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/CAT"
android:src="@drawable/cat"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/LION"
android:src="@drawable/lion"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/DOG"
android:src="@drawable/dog"/>
</FrameLayout>
<TabWidget
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@android:id/tabs"
android:background="#f0f000"/>
</LinearLayout>

</TabHost>



MainActivity

XML코드에서 탭위젯의 위치조정하는 작업말고는 다른게 없습니다.

맨아래 tabHost.setCurrentTab(0)의 의미는 최초의 시작화면을 0번째(DOG)화면으로 띄워놓겠다는 의미입니다.

package com.example.practice6_3;

import androidx.appcompat.app.AppCompatActivity;

import android.app.TabActivity;
import android.os.Bundle;
import android.widget.TabHost;
@SuppressWarnings("deprecation")
public class MainActivity extends TabActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabHost tabHost=getTabHost();
TabHost.TabSpec tabSpecdog=tabHost.newTabSpec("dog").setIndicator("강아지");
tabSpecdog.setContent(R.id.DOG);
tabHost.addTab(tabSpecdog);
TabHost.TabSpec tabSpeccat=tabHost.newTabSpec("cat").setIndicator("고양이");
tabSpeccat.setContent(R.id.CAT);
tabHost.addTab(tabSpeccat);
TabHost.TabSpec tabSpecrab=tabHost.newTabSpec("rab").setIndicator("토끼");
tabSpecrab.setContent(R.id.RAB);
tabHost.addTab(tabSpecrab);
TabHost.TabSpec tabSpeclion=tabHost.newTabSpec("lion").setIndicator("사자");
tabSpeclion.setContent(R.id.LION);
tabHost.addTab(tabSpeclion);
tabHost.setCurrentTab(0);
}
}


'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 7-2  (4) 2020.05.19
직접 풀어보기 7-1  (0) 2020.05.18
직접 풀어보기 6-2  (2) 2020.05.04
직접 풀어보기 6-1  (1) 2020.05.03
직접 풀어보기 5-5  (0) 2020.05.03


Android Studio를 활용한 안드로이드 프로그래밍 P259 직접 풀어보기 6-2


뷰플리퍼를 이용하여 자동 사진 보기 앱을 작성하라.


적절한 이미지 여러 장이 "자동"으로 넘어가는 앱을 만든다.

<사진보기 시작>버튼 클릭 시 1초 단위로 화면이 넘어가고, <사진보기 정지>를 누르면 멈춘다.

*본인은 3개의 사진을 이용했음




XML코드

미리 사진을 drawable 폴더에 넣어놔야합니다. 형식이름이 jpeg면 XML코드에서 인식을 못하므로 jpg나 png방식을 권장합니다.

저는 png 파일 형식을 이용했습니다.


*JPEG파일을 PNG파일로 변환시키는 방법

그림판-> JPEG파일 열기-> 다른이름으로저장(PNG파일로 저장)



<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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnPrev"
android:layout_weight="1"
android:text="사진보기시작"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnNext"
android:layout_weight="1"
android:text="사진보기정지"/>
</LinearLayout>
<ViewFlipper
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewFli1">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/cat"
android:id="@+id/cat1"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/dog"
android:id="@+id/dog1"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/rab"
android:id="@+id/rab1"/>
</ViewFlipper>
<!-- 몇개의 사진을 app->res->drawable 폴더에 넣어놔야함
// jpeg 는 인식을 못하므로 jpg나 png 파일을 권장함. 본인은 png파일사용-->
</LinearLayout>


MainActivity

startFlipping, stopFlipping, setFilplnterval 메소드를 어떻게 사용했는지만 살펴보면 될 것 같습니다.

시간간격은 ms단위이므로 1000은 1초를 의미합니다.

package com.example.pracice6_2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnPrev,btnNext;
final ViewFlipper vf;
btnPrev=(Button)findViewById(R.id.btnPrev);
btnNext=(Button)findViewById(R.id.btnNext);
vf=(ViewFlipper)findViewById(R.id.viewFli1);
ImageView a1=(ImageView)findViewById(R.id.cat1);
ImageView a2=(ImageView)findViewById(R.id.dog1);
ImageView a3=(ImageView)findViewById(R.id.rab1);
btnPrev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
vf.setFlipInterval(1000);
vf.startFlipping();
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
vf.stopFlipping();
}
});
}
}


'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 7-1  (0) 2020.05.18
직접 풀어보기 6-3  (5) 2020.05.11
직접 풀어보기 6-1  (1) 2020.05.03
직접 풀어보기 5-5  (0) 2020.05.03
직접 풀어보기 5-4  (0) 2020.05.03


Android Studio를 활용한 안드로이드 프로그래밍 P249 직접 풀어보기 6-1


다음과 같이 작동하는 프로그램을 작성하시오.


데이트피커를 사용->날짜 설정

크로노미터클릭 시 ->라디오버튼 보이도록설정, 데이트피커,타임피커 보이게 설정

맨 아래 텍스트뷰의 연도("0000"년) 길게 클릭 시-> 라디오버튼,데이트피커,타임피커 사라지게 설정+

설정한 년도/월/일/시/분 출력


1. 크로노 클릭 후 보여지는 라디오버튼(날짜 설정)


2. 크로노 클릭 후 보여지는 라디오버튼(시간 설정)


3. TextView "0000"년 롱 클릭 시  나타나는 화면

*5월 19일이 나와야합니다.(실수)


XML코드

크로노랑 텍스트뷰도 클릭이 된다는 점을 처음 이용해봤습니다.

데이트피커, 타임피커를 출력할 때 위와 같은 화면을 띄우기 위해 

android:timePickerMode="spinner"

android:datePickerMode="spinner"를 작성해야합니다.

(위와 같은 화면은 롤리팝 버전 까지 통용되므로 이러한 별도의 코드를 작성해야합니다.)


<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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Chronometer
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ch1"
android:format="예약에 걸린 시간: %s"
android:gravity="center"
android:textSize="20dp"/>
</LinearLayout>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rdoCal"
android:text="날짜 설정"/>
<RadioButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rdoTime"
android:text="시간 설정"/>
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<DatePicker
android:datePickerMode="spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/datePicker1" />
<TimePicker
android:timePickerMode="spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/timePicker1"/>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#CCCCCC"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvYear"
android:text="0000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="년"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvMonth"
android:text="00"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="월"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvDay"
android:text="00"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="일"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvHour"
android:text="00"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="시"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvMinute"
android:text="00"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="분"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="예약됨"/>
</LinearLayout>
</LinearLayout>


MainActivity

데이트피커에서 월은 0부터 시작하므로 +1해주어야합니다.

연도를 롱클릭 할 때의 리스너함수만 잘 작성하면 될 것 같습니다.

package com.example.practice6_1;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.Chronometer;
import android.widget.DatePicker;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.DatePicker;

import org.w3c.dom.Text;

import java.sql.Time;

public class MainActivity extends AppCompatActivity {

Chronometer chrono;
Button btnStart, btnEnd;
RadioButton rdoCal, rdoTime;
DatePicker dpicker;
TimePicker timePicker;
TextView tvYear, tvMonth, tvDay, tvHour, tvMinute;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("시간 예약(수정)");
chrono = (Chronometer) findViewById(R.id.ch1);
rdoCal = (RadioButton) findViewById(R.id.rdoCal);
rdoTime = (RadioButton) findViewById(R.id.rdoTime);
dpicker=(DatePicker)findViewById(R.id.datePicker1);
timePicker = (TimePicker) findViewById(R.id.timePicker1);

tvYear = (TextView) findViewById(R.id.tvYear);
tvMonth = (TextView) findViewById(R.id.tvMonth);
tvDay = (TextView) findViewById(R.id.tvDay);
tvHour = (TextView) findViewById(R.id.tvHour);
tvMinute = (TextView) findViewById(R.id.tvMinute);
timePicker.setVisibility(View.INVISIBLE);
dpicker.setVisibility(View.INVISIBLE);
rdoCal.setVisibility(View.INVISIBLE);
rdoTime.setVisibility(View.INVISIBLE);
chrono.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rdoCal.setVisibility(View.VISIBLE);
rdoTime.setVisibility(View.VISIBLE);
}
});
rdoCal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timePicker.setVisibility(View.INVISIBLE);
dpicker.setVisibility(View.VISIBLE);
}
});
rdoTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timePicker.setVisibility(View.VISIBLE);
dpicker.setVisibility(View.INVISIBLE);
}
});
chrono.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
chrono.setBase(SystemClock.elapsedRealtime());
chrono.start();
chrono.setTextColor(Color.RED);
rdoCal.setVisibility(View.VISIBLE);
rdoTime.setVisibility(View.VISIBLE);
}
});
tvYear.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
chrono.stop();
chrono.setTextColor(Color.BLUE);
tvYear.setText(Integer.toString(dpicker.getYear()));
tvMonth.setText(Integer.toString(1+dpicker.getMonth()));
tvDay.setText(Integer.toString(dpicker.getDayOfMonth()));
tvHour.setText(Integer.toString(timePicker.getCurrentHour()));
tvMinute.setText(Integer.toString(timePicker.getCurrentMinute()));
rdoCal.setVisibility(View.INVISIBLE);
rdoTime.setVisibility(View.INVISIBLE);
dpicker.setVisibility(View.INVISIBLE);
timePicker.setVisibility(View.INVISIBLE);
return false;
}
});

}
}




'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 6-3  (5) 2020.05.11
직접 풀어보기 6-2  (2) 2020.05.04
직접 풀어보기 5-5  (0) 2020.05.03
직접 풀어보기 5-4  (0) 2020.05.03
직접 풀어보기 5-3  (0) 2020.05.03


Android Studio를 활용한 안드로이드 프로그래밍  직접 풀어보기 P233 5-5


테이블레이아웃으로 작성한 계산기 프로그램을 그리드 레이아웃으로 변경하여 실행하기



XML코드

테이블레이아웃과 그리드 레이아웃을 각각 화면에 꼭 맞춰서 보이게하는 방법은 다릅니다.

일반적으로 각 버튼의 간격조절없이 코드를 작성하면 테이블 레이아웃, 그리드 레이아웃 둘다 오른쪽 화면이 짤리는데 해결방법은 다음과 같습니다.


테이블 레이아웃: 모든 버튼의 layout_weight을 1로 설정한다.

그리드 레이아웃: 위젯의 사이즈(width,height)를 "직접" 지정한다.


그렇기 때문에 화면짤림을 방지하기 위해 직접 각 위젯의 사이즈를 지정했습니다.

각 숫자버튼을 80dp로 지정했을 때 가장 적당했고 그렇기 때문에연산버튼은 80*5=400dp가 적당했습니다.

4개의 연산버튼은 하나의 버튼만 400dp로 지정해두면 나머지 버튼들이 지정해둔 사이즈로 자동 변환됩니다.


이것만 주의하면 테이블레이아웃으로 구현한것과 별로 다를 게 없습니다.

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="5"
android:rowCount="9">
<EditText
android:layout_column="0"
android:layout_row="0"
android:id="@+id/edit1"
android:layout_columnSpan="5"
android:layout_gravity="fill_horizontal"
android:hint="숫자1입력" />
<EditText
android:layout_column="0"
android:layout_row="1"
android:id="@+id/edit2"
android:layout_columnSpan="5"
android:layout_gravity="fill_horizontal"
android:hint="숫자1입력"/>
<Button
android:layout_column="0"
android:layout_row="2"
android:id="@+id/btn0"
android:text="0"
android:layout_width="80dp"
/>
<Button
android:layout_column="1"
android:layout_row="2"
android:id="@+id/btn1"
android:text="1"
android:layout_width="80dp"
/>
<Button
android:layout_column="2"
android:layout_row="2"
android:id="@+id/btn2"
android:text="2"
android:layout_width="80dp"
/>
<Button
android:layout_column="3"
android:layout_row="2"
android:id="@+id/btn3"
android:text="3"
android:layout_width="80dp"
/>
<Button
android:layout_column="4"
android:layout_row="2"
android:id="@+id/btn4"
android:text="4"
android:layout_width="80dp"
/>
<Button
android:layout_column="0"
android:layout_row="3"
android:id="@+id/btn5"
android:text="5"
android:layout_width="80dp"
/>
<Button
android:layout_column="1"
android:layout_row="3"
android:id="@+id/btn6"
android:text="6"
android:layout_width="80dp"
/>
<Button
android:layout_column="2"
android:layout_row="3"
android:id="@+id/btn7"
android:text="7"
android:layout_width="80dp"
/>
<Button
android:layout_column="3"
android:layout_row="3"
android:id="@+id/btn8"
android:text="8"
android:layout_width="80dp"
/>
<Button
android:layout_column="4"
android:layout_row="3"
android:id="@+id/btn9"
android:text="9"
android:layout_width="80dp"
/>
<Button
android:layout_column="0"
android:layout_row="4"
android:id="@+id/btnAdd"
android:layout_margin="5dp"
android:layout_columnSpan="5"
android:layout_gravity="fill_horizontal"
android:layout_width="400dp"
android:text="더하기" />
<Button
android:layout_column="0"
android:layout_row="5"
android:id="@+id/btnMin"
android:layout_margin="5dp"
android:layout_columnSpan="5"
android:layout_gravity="fill_horizontal"
android:text="빼기"
/>
<Button
android:layout_column="0"
android:layout_row="6"
android:id="@+id/btnMul"
android:layout_margin="5dp"
android:layout_columnSpan="5"
android:layout_gravity="fill_horizontal"
android:text="곱하기"
/>
<Button
android:layout_column="0"
android:layout_row="7"
android:id="@+id/btnDiv"
android:layout_margin="5dp"
android:layout_columnSpan="5"
android:layout_gravity="fill_horizontal"
android:text="나누기" />
<TextView
android:layout_column="0"
android:layout_row="8"
android:id="@+id/textRes"
android:layout_margin="5dp"
android:text="계산결과: "
android:textColor="#FF0000"
android:textSize="20sp"
android:layout_columnSpan="5"
android:layout_gravity="fill_horizontal"/>

</GridLayout>


MainActivity

index를 final형으로 선언하는 이유는 지역변수로 선언 시 아래의 익명클래스에서 인식을 못하기 때문입니다.

그리고 아래와 같은 코드를통해 입력받은수와 번호버튼으로 입력한 숫자가 합쳐집니다.

ex) 80입력 후 9버튼 클릭=> 809

 num1=edit1.getText().toString()+numButtons[index].getText().toString();
package com.example.practice5_5;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
EditText edit1, edit2;
Button btnAdd,btnMin,btnMul,btnDiv;
TextView textRes;
String num1,num2;
Integer res;
Button[] numButtons=new Button[10];
Integer[] numBtnIds={R.id.btn0,R.id.btn1,R.id.btn2,R.id.btn3,R.id.btn4,R.id.btn5,
R.id.btn6,R.id.btn7,R.id.btn8,R.id.btn9};
int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("그리드레이아웃 계산기");

edit1=(EditText) findViewById(R.id.edit1);
edit2=(EditText) findViewById(R.id.edit2);
btnAdd=(Button)findViewById(R.id.btnAdd);
btnMin=(Button)findViewById(R.id.btnMin);
btnMul=(Button)findViewById(R.id.btnMul);
btnDiv=(Button)findViewById(R.id.btnDiv);
textRes=(TextView)findViewById(R.id.textRes);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
num1=edit1.getText().toString();
num2=edit2.getText().toString();
res=Integer.parseInt(num1)+Integer.parseInt(num2);
textRes.setText("계산결과: "+res.toString());
}
});
btnMin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
num1=edit1.getText().toString();
num2=edit2.getText().toString();
res=Integer.parseInt(num1)-Integer.parseInt(num2);
textRes.setText("계산결과: "+res.toString());
}
});
btnMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
num1=edit1.getText().toString();
num2=edit2.getText().toString();
res=Integer.parseInt(num1)*Integer.parseInt(num2);
textRes.setText("계산결과: "+res.toString());
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
num1=edit1.getText().toString();
num2=edit2.getText().toString();
res=Integer.parseInt(num1)/Integer.parseInt(num2);
textRes.setText("계산결과: "+res.toString());
}
});
for(i=0;i<numBtnIds.length;i++)
numButtons[i]=(Button)findViewById(numBtnIds[i]);

for(i=0;i<numBtnIds.length;i++)
{
final int index;
index=i;
numButtons[index].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edit1.isFocused()==true)
{
num1=edit1.getText().toString()+numButtons[index].getText().toString();
edit1.setText(num1);
}
else if(edit2.isFocused()==true)
{
num2=edit2.getText().toString()+numButtons[index].getText().toString();
edit2.setText(num2);
}
else
{
Toast.makeText(getApplicationContext(),"선택하세요..",Toast.LENGTH_SHORT).show();
}
}
});
}
}
}








'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 6-2  (2) 2020.05.04
직접 풀어보기 6-1  (1) 2020.05.03
직접 풀어보기 5-4  (0) 2020.05.03
직접 풀어보기 5-3  (0) 2020.05.03
직접 풀어보기 5-2  (0) 2020.05.03


Android Studio를 활용한 안드로이드 프로그래밍 P22 직접 풀어보기 5-4


다음 화면의 XML코드를 중복 리니어레이아웃과 렐러티브레이아웃으로 각각 작성하라.




중복리니어 레이아웃 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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="전화번호"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="000-0000-0000"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="입력"
android:textSize="20sp"
android:background="#00FF00"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="취소"
android:textSize="20sp"
android:background="#00FF00"
/>
</LinearLayout>

</LinearLayout>



렐러티브레이아웃 XML코드

입력 버튼과 취소 버튼의 위치 선정 시 주의할 점이 있습니다.

만약 입력버튼을 edit의  below && alignRight을 하고 취소버튼을 입력버튼에 대해 alignBaseline&& toRightOf를 하게되면

입력버튼이 이미 맨 오른 쪽에 위치하므로 취소버튼이 화면에 보이지 않게 됩니다.

그래서 저는 취소버튼을 먼저 TextView와 EditText에 대해 위치시키고 나서 입력버튼을 취소버튼에 대해 위치시켰습니다.


<RelativeLayout 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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text1"
android:text="전화번호"
android:textSize="30dp"/>
<EditText
android:id="@+id/edit1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/text1"
android:hint="000-0000-0000"/>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_toLeftOf="@+id/btn2"
android:layout_alignBaseline="@+id/btn2"
android:text="입력"
android:background="#00FF00"/>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_below="@+id/text1"
android:layout_alignRight="@+id/edit1"
android:text="취소"
android:background="#00FF00"/>
<!-- 주의 : 입력버튼을 먼저 edit의 below && alignRigrt하고 취소버튼을 입력버튼에 대해 위치작성하면
입력버튼이 이미 맨 오른쪽 끝에 있으므로 취소버튼이 안보임 ! -->

</RelativeLayout>


'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 6-1  (1) 2020.05.03
직접 풀어보기 5-5  (0) 2020.05.03
직접 풀어보기 5-3  (0) 2020.05.03
직접 풀어보기 5-2  (0) 2020.05.03
직접 풀어보기 4-3  (0) 2020.05.03


Android Studio를 활용한 안드로이드 프로그래밍 P217 직접 풀어보기 5-3


XML파일 없이 JAVA코드만 이용하여 에디드텍스트에 문장 입력 후 버튼을 클릭하면 텍스트뷰가 출력되는 프로그램만들기




XML 코드

XML파일을 지우고 시작하므로 파일은 없습니다.


MainActivity

XML코드를 사용하지않기 때문에 setConteneView함수를 주석처리 or 삭제합니다.

지역변수로 각 위젯을 선언하면 버튼 리스너에서 EditText입력값을 인식하지못하므로 전역으로 선언했습니다.

아래와 같이 코드 작성 후 문장을 입력하고 버튼을 클릭하면 아래의 TextView에 똑같은 문장이 출력됩니다.

package com.example.practice5_3;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

EditText edit;
Button btn;
TextView tes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT
);
LinearLayout linear=new LinearLayout(this);
linear.setOrientation(LinearLayout.VERTICAL);
setContentView(linear,params);

edit=new EditText(this);
edit.setHint("입력하세요");
linear.addView(edit);
btn=new Button(this);
btn.setText("버튼입니다.");
btn.setBackgroundColor(Color.rgb(0,122,0));
linear.addView(btn);
tes=new TextView(this);
tes.setTextSize(30);
tes.setTextColor(Color.MAGENTA);
linear.addView(tes);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String sentence;
sentence=edit.getText().toString();
tes.setText(sentence);
}
});
}
}


'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 5-5  (0) 2020.05.03
직접 풀어보기 5-4  (0) 2020.05.03
직접 풀어보기 5-2  (0) 2020.05.03
직접 풀어보기 4-3  (0) 2020.05.03
직접 풀어보기 4-2  (0) 2020.05.03


Android Studio를 활용한 안드로이드 프로그래밍 P211 직접 풀어보기 5-2


다음과 같은 레이아웃을 표현하는 코드를 작성하시오.(중복 LinearLayout 사용)




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">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_weight="1"
android:background="#FF0000">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"></LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:background="#fff200"></LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:background="#000000"></LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0000FF"
android:layout_weight="1"
android:backgroundTint="#1d2f89"></LinearLayout>
</LinearLayout>









'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 5-5  (0) 2020.05.03
직접 풀어보기 5-4  (0) 2020.05.03
직접 풀어보기 5-3  (0) 2020.05.03
직접 풀어보기 4-3  (0) 2020.05.03
직접 풀어보기 4-2  (0) 2020.05.03


Android Studio를 활용한 안드로이드 프로그래밍 P181 직접풀어보기 4-3


다음과 같은 기능을 수행하는 간단한 계산기 프로그램을 작성하라.




XML코드

레이아웃에 보이는 위젯들에 대해 설정해주면됩니다. 간격조절을 위해 각 위젯의 layout_margin을 10dp로 설정했습니다.


<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" >

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/edit1"
android:layout_margin="10dp"
android:hint="입력1"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/edit2"
android:layout_margin="10dp"
android:hint="입력2"/>
<Button
android:id="@+id/btnAdd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="더하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:id="@+id/btnMin"
android:text="빼기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:id="@+id/btnMul"
android:text="곱하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:id="@+id/btnDiv"
android:text="나누기"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/TextRes"
android:textSize="30sp"
android:textColor="#FF0000"
android:layout_margin="10dp"
android:text="계산결과: "/>
</LinearLayout>


MainActivity 코드

책에서는 각 연산에 대해 일일히 클릭했을 때의 리스너를 익명클래스로 구현했는데수업시간에 교수님께서 view 클래스를 이용해서 

switch케이스문으로 깔끔하게 코드 작성하는 방법을 알려주셔서 이 방식으로 작성해봤습니다.각 연산버튼의 리스너함수를 정의하고 

각 연산버튼을 클릭했을 때의 리스너를 인자에 넣어주면됩니다.

package com.example.practice4_3;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
EditText edit1,edit2;
Button btnAdd,btnMin,btnMul,btnDiv;
String num1,num2;
TextView res;
Integer textres;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit1=(EditText)findViewById(R.id.edit1);
edit2=(EditText)findViewById(R.id.edit2);
btnAdd=(Button)findViewById(R.id.btnAdd);
btnMin=(Button)findViewById(R.id.btnMin);
btnMul=(Button)findViewById(R.id.btnMul);
btnDiv=(Button)findViewById(R.id.btnDiv);
res=(TextView)findViewById(R.id.TextRes);
View.OnClickListener Listener=new View.OnClickListener() {
@Override
public void onClick(View view) {
switch(view.getId())
{
case R.id.btnAdd:
num1=edit1.getText().toString();
num2=edit2.getText().toString();
textres=Integer.parseInt(num1)+Integer.parseInt(num2);
res.setText("계산결과:"+textres);
break;
case R.id.btnMin:
num1=edit1.getText().toString();
num2=edit2.getText().toString();
textres=Integer.parseInt(num1)-Integer.parseInt(num2);
res.setText("계산결과:"+textres);
break;
case R.id.btnMul:
num1=edit1.getText().toString();
num2=edit2.getText().toString();
textres=Integer.parseInt(num1)*Integer.parseInt(num2);
res.setText("계산결과:"+textres);
break;
case R.id.btnDiv:
num1=edit1.getText().toString();
num2=edit2.getText().toString();
textres=Integer.parseInt(num1)/Integer.parseInt(num2);
res.setText("계산결과:"+textres);
break;
}
}
};
btnAdd.setOnClickListener(Listener);
btnMin.setOnClickListener(Listener);
btnMul.setOnClickListener(Listener);
btnDiv.setOnClickListener(Listener);
}
}





'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글

직접 풀어보기 5-5  (0) 2020.05.03
직접 풀어보기 5-4  (0) 2020.05.03
직접 풀어보기 5-3  (0) 2020.05.03
직접 풀어보기 5-2  (0) 2020.05.03
직접 풀어보기 4-2  (0) 2020.05.03

+ Recent posts