우분투에 phpmyadmin설치 후 안 열릴때



설치 하기

$ sudo apt-get install vsftpd


설정 하기

쓰기 권한을 주기 위해서 /etc/vsftpd.conf 파일에서 아래 부분을 찾아

# 코멘트만 제거해 주면, 기본적으로 사용할 수 있는 환경이 됩니다.

write_enable=YES

local_umask=022

서버가 클라이언트쪽에 비정상적인 접속시도를 하는 것을 막기 위한 passive 모드 사용을 위해선

아래 내용도 /etc/vsftpd.conf 파일 끝에 추가해 줍니다.


allow_writeable_chroot=YES

pasv_enable=Yes

pasv_min_port=40000

pasv_max_port=40100

서비스 컨트롤 방법


vsftp 서버의 시작/중지/재시작은 우분투의 service명령을 사용합니다.

아파치 서버 컨트롤과 같은 방식입니다.


$ sudo service vsftpd start ## vsftpd 데몬을 시작합니다.

$ sudo service vsftpd stop ## vsftpd 데몬을 멈춥니다.

$ sudo service vsftpd restart ## vsftpd 데몬을 재시작합니다.

ftp 명령어 사용법


ftp에서 제공하는 명령어 리스트는 ftp명령후 ftp프롬프트에서 help 명령으로 확인 가능합니다.


$ ftp

ftp> help

접속은 ftp 모드에서 open 명령을 사용하는 법과


$ ftp

ftp> open 192.168.0.110 

ftp 명령어 뒤에 직접 ip나 호스트명을 써서  접속하는 법이 있습니다.


ftp 192.168.0.110

ftp 모드에서 자주 사용하는 명령어를 정리해 보면 아래와 같습니다.

A라는 컴퓨터에서 B(192.168.0.111)라는 컴퓨터에 ftp 접속하여 파일을 보내고 받는 스토리를 가정해 보겠습니다.


$ cd ~/Downloads ## A 컴퓨터에서 홈디렉토리 아래 Downloads 디렉토리로 이동합니다.

$ ftp 192.168.0.111 ## A에서 B로 ftp접속 합니다. 

$ password: ## 아이디/암호 치시면 기본적으로 B 컴퓨터의 아이디의 홈디렉토리로 이동합니다.

ftp> cd /temp ## B 컴퓨터의 /temp 디렉토리로 이동합니다.

ftp> bin ## 전송 모드를 binary로 설정합니다. ascii 모드 보다 안정적입니다.

ftp> ls ## B 컴퓨터 /temp 디렉토리 파일들을 리스트 합니다.

ftp> get testB.txt ## B 컴퓨터 /temp 디렉토리의 testB.txt 파일을 A 컴퓨터 ~/Downloads 디렉토리로 가져옵니다.

ftp> put testA.txt ## A 컴퓨터 ~/Downloads 디렉토리의 testA.txt 파일을 B 컴퓨터 /temp 디렉토리로 보냅니다.

ftp> mget *.mp3 ## B 컴퓨터 /temp 디렉토리의 mp3 파일 모두를 A 컴퓨터 ~/Downloads 디렉토리로 가져옵니다.

ftp> mput *.mp4 ## A 컴퓨터 ~/Downloads 디렉토리의 mp4 파일 모두를 B 컴퓨터 /temp 디렉토리로 보냅니다.

ftp> prompt ## mget이나 mput 명령어 사용시 파일 각각에 대해 전송여부 yes/no를 묻는게 불편할 때 사용합니다.

## 토글링 명령어라 온/오프 식으로 동작합니다.

ftp> passive ## 패시브 모드를 온 시킵니다.

ftp> exit ## 빠져 나옵니다. quit를 사용하셔도 됩니다.

홈디렉토리 밖으로도 접근하게 하려면 /etc/vsftpd.conf 파일에서


chroot_local_user=YES

라인을 찾아서 # 코멘트를 제거해 주세요.


혹 ftp를 이용하여 일괄 백업이나, 자동 파일 배포등의 스크립트 파일을 만들어 사용하시고픈 경우는

-ni 옵션과 input 리다이렉트 < 를 이용하시면 좋습니다.

간단히 억지 예를 들어 설명드리면  test.sh란 파일을  자주 특정 컴퓨터에 보내야 하는 상황이 있다면,

그 때 마다  명령어를 일일이 치는 것은 비효율적일 겁니다.

ftp모드에서 사용하는 명령어들 즉 아래내용을 그대로 파일로 저장하고, 파일명은 임의로 ftpTransfer라고 하면 


open 192.168.0.111

user 유저명 암호

bin

put test.sh

bye

아래 코드 처럼 입력하면 네트워크 자체에 문제가 없다면 파일 안의 내용이 자동으로 실행되어 파일이 전송됩니다.

crontab을 이용하시면 특정 시간에 실행되는 스크립트를 만들수 있고,

필요한 상황을 잘 분석하시면 스크립트를 이용해서 좋은 자동 전송명령어를 만드실 수 있을겁니다.


ftp -ni < ./ftpTransfer 

보안문제가 걱정되신다면  외부 네트워크에 접속하는 경우에는 sftp(secure ftp) 사용을 권장드립니다.


출처 http://html5around.com/wordpress/tutorials/ubuntu-ftp-server-install-use/



 

– APM 설치

 

1. Apache2 설치

$ sudo apt-get install mysql-server mysql-client

 

2. MySql server / client 설치

$ sudo apt-get install mysql-server mysql-client

(MySQL root 패스워드 설정 필요)

 

3. PHP 설치

$ sudo apt-get install php5 php5-common

 

4. Apache / PHP 연동

$ sudo apt-get install libapache2-mod-php5

 

5. PHP / MySQL 연동

$ sudo apt-get install php5-mysql

 
 

– APM 동작확인

 

1. Apache / MySQL 재시작

$ sudo service apache2 restart

$ sudo service mysql restart

 

2. Apache인인 / PHP 연동 확인

$ sudo vi /var/www/html/phpinfo.php

<?php
phpinfo();
?>

http://localhost/phpinfo.php 접속

 

PHP Version 5.5.9-1ubuntu4.9

 

System
Build Date
Server APIApache 2.0 Handler
Virtual Directory Supportdisabled
Configuration File (php.ini) Path/etc/php5/apache2
Loaded Configuration File/etc/php5/apache2/php.ini
Scan this dir for additional .ini files/etc/php5/apache2/conf.d

….

 
 

3. 이후 설정 변경경로

Apache: /etc/apache2/apache2.conf

MySQL: /etc/mysql/my.cnf

PHP: /etc/php5/apache2/php.ini



출처 https://swbae98.wordpress.com/2015/05/16/ubuntu-14-04-apm-apachephpmysql-%EC%84%A4%EC%B9%98/

16.04 Apache2 PHP 설치하기


기존에 설치되어 있던 패키지를 업그레이드

$ sudo apt-get upgrade

Apache2 웹서버 설치

$ sudo apt-get install apache2


url 에 localhost 입력해서 아파치 화면이 뜨는지 확인


PHP 패키지를 다운로드 받기 위한 저장소를 추가


$ sudo add-apt-repository ppa:ondrej/php



추가한 저장소에서 목록 가져오기

sudo apt-get update



php 7.1설치

$ sudo apt-get install php7.1 php7.1-common



필요한 패키지 설치

$ sudo apt-get install php7.1-mysql php7.1-curl php7.1-xml php7.1-zip php7.1-gd php7.1-mbstring php7.1-mcrypt


php가 잘 설치 되었는지 확인

sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'


php5.6설치

$ sudo apt-get install php5.6 php5.6-common


필요패키지 설치

$ sudo apt-get install php5.6-mysql php5.6-curl php5.6-xml php5.6-zip php5.6-gd php5.6-mbstring php5.6-mcrypt


확인

$ sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'


php7.1을 5.6으로 변경

$ sudo a2dismod php7.1 ; sudo a2enmod php5.6 ; sudo service apache2 restart
$ sudo update-alternatives --set php /usr/bin/php5.6


php5.6을 7.1으로 변경

$ sudo a2dismod php5.6 ; sudo a2enmod php7.1 ; sudo service apache2 restart
$ sudo update-alternatives --set php /usr/bin/php7.1



phpMyAdmin 설치

$ sudo apt-get install phpmyadmin


localhost/phpmyadmin으로 접속이 안될때

설정파일 열기

vi /etc/apache2/apache2.conf


아래 내용입력!

Include /etc/phpmyadmin/apache.conf


재시작

/etc/init.d/apache2 restart



리스트뷰 어뎁터로 데이터 보여주기


#개념





#메인화면



#아이템이 들어있는 화면 

#엑티비티 main xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">


<Button
android:id="@+id/button"
android:layout_width="99dp"
android:layout_height="wrap_content"
android:text="input" />

<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="textPersonName"
android:text="aaaa" />

<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="textPersonName"
android:text="010-54568-5435" />

</LinearLayout>


<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/linearLayout" />

</RelativeLayout>



#singer_item.xml

<?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="wrap_content"
android:orientation="horizontal">

<ImageView
android:id="@+id/imageView"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@mipmap/ic_launcher" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:orientation="vertical">

<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="name"
android:textColor="@color/colorPrimaryDark"
android:textSize="30dp" />


<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="tell"
android:textColor="@android:color/holo_orange_light"
android:textSize="24dp" />
</LinearLayout>


</LinearLayout>



#MainActivity.java

package me.happygate.mylist0823;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
SingerAdapter adapter;

EditText editText;
EditText editText2;

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

//데이터를 추가할 때 사용될 에딧 텍스트
editText = (EditText) findViewById(R.id.editText);
editText2 = (EditText) findViewById(R.id.editText2);

//리스트 뷰에 어뎁터로 만든 데이터 넣어주기(껍데기)
ListView listView = (ListView) findViewById(R.id.listView);

//알맹이
adapter = new SingerAdapter();

adapter.addItem(new SingerItem("소시", "010-02450-0101", R.drawable.ad));
adapter.addItem(new SingerItem("가시", "010-014510-0101", R.drawable.ad));
adapter.addItem(new SingerItem("진시", "010-0122310-0101", R.drawable.ad));
adapter.addItem(new SingerItem("희시", "010-0122310-0101", R.drawable.ad));
adapter.addItem(new SingerItem("대시", "010-023410-0101", R.drawable.ad));
adapter.addItem(new SingerItem("명시", "010-023410-0101", R.drawable.ad));

//리스트 뷰에 데이터가 들어있는 어댑터를 넣어준다.
listView.setAdapter(adapter);


//리스트뷰를 클릭했을 때!!
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

SingerItem item = (SingerItem) adapter.getItem(position);
Toast.makeText(getApplicationContext(), "선택:" + item.getName(), Toast.LENGTH_SHORT).show();
}
});

//추가 클릭했을 때
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = editText.getText().toString();
String mobile = editText2.getText().toString();
adapter.addItem(new SingerItem(name, mobile, R.drawable.ad));

//리스트뷰 갱신
adapter.notifyDataSetChanged();
}
});
}


//!!!!!!!!!!!!!!!어텝터 정의!!!!!!!!
class SingerAdapter extends BaseAdapter {
//데이터 담을 수 있는 공간 설정
ArrayList<SingerItem> items = new ArrayList<SingerItem>();


//몇개있니?
@Override
public int getCount() {
return items.size();
}

//삽입
public void addItem(SingerItem item) {
items.add(item);

}


//선택한 아이템 번호
@Override
public Object getItem(int position) {

return items.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

//중요 !! 어뎁터가 뷰를 만들어줌 (부분화면 정의한거 리턴)
@Override
public View getView(int position, View convertView, ViewGroup parent) {

//뷰를 만들어 줄때 재사용할 수 있게
//화면에 안보여 지게되는것은 다시 재사용하게 되면서 new로 만들필요 없다.
// 코드 재사용 convertView 사용

SingerItemView view = null;

//convertView null 이면

if (convertView == null) {

view = new SingerItemView(getApplicationContext());

} else {
//이전에 섰던 데이터 singeritemview로 캐스팅해서 재사용
view = (SingerItemView) convertView;

}

//위에서 정의한 arraylist 에서 하나하나의 데이터를 가져와서
//String item 객체에 담는다.
SingerItem item = items.get(position);

// SingerItemView 클래스에 정의한 set 메서드에 데이터를 담아서 리턴한다.
view.setName(item.getName());
view.setMobile(item.getMobile());
view.setImage(item.getResId());

return view;
}
}

}

#SingerItem.java

package me.happygate.mylist0823;

/**
* Created by kang on 2017-08-23.
*/

public class SingerItem {

String name;
String mobile;
int resId;

public SingerItem(String name, String mobile, int resId) {
this.name = name;
this.mobile = mobile;
this.resId = resId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getMobile() {
return mobile;
}

public void setMobile(String mobile) {
this.mobile = mobile;
}

public int getResId() {
return resId;
}

public void setResId(int resId) {
this.resId = resId;
}
}

#SingerItemView.java

package me.happygate.mylist0823;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
* Created by kang on 2017-08-23.
*/

public class SingerItemView extends LinearLayout {

TextView textView;
TextView textView2;
ImageView imageView;

//viwe를 위한 필수 생성자 2
public SingerItemView(Context context) {
super(context);

init(context);
}

public SingerItemView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}


private void init(Context context) {
//단말이 시작될때 기본적으로 뒤에서 실행
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//단말이 시작될때 리스트 아이템 디자인을 정의한 singer_item.xml
// activity_main.xml에 정의한 리니어 레이아웃에 달라 붙는다.
inflater.inflate(R.layout.singer_item, this, true);

//singer_item 에 정의한 것들 선택자 가져오기
textView = (TextView) findViewById(R.id.text1);
textView2 = (TextView) findViewById(R.id.text2);
imageView = (ImageView) findViewById(R.id.imageView);
}

//MainActivity getView() 에서 setName 이 호출되면 값을 textView 에 넣어준다.
public void setName(String name) {

textView.setText(name);
}

public void setMobile(String mobile) {

textView2.setText(mobile);
}

public void setImage(int resId) {

imageView.setImageResource(resId);
}
}



버튼을 비트맵 이미지로 바꾸기


#개념



#결과화면


#메인 엑티비티 레이아웃.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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="vertical">
 
 
    <me.happygate.my0823.BitmapButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="helloWorld"/>
 
</LinearLayout>
 
cs

#메인 엑티비티.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
package me.happygate.my0823;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
 
cs


#버튼을 상속한 새로운 클래스 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package me.happygate.my0823;
 
import android.content.Context;
import android.support.v7.widget.AppCompatButton;
import android.util.AttributeSet;
import android.view.MotionEvent;
 
/**
 * Created by kang on 2017-08-23.
 */
 
//BitmapButton 클래스는 AppCompatButton을 상속한다
public class BitmapButton extends AppCompatButton {
 
    //생성자 만들어주기
    public BitmapButton(Context context) {
        super(context);
        init(context);
    }
 
    public BitmapButton(Context context, AttributeSet attrs) {
        super(context, attrs);
 
        init(context);
 
    }
 
    private void init(Context context) {
 
        //버튼 배경이미지 설정
        setBackgroundResource(R.drawable.a);
 
        //버튼 글자 크기 지정
        //dimens xml 에서 버튼 크기 지정했다.
        float textSize = getResources().getDimension(R.dimen.text_size);
        setTextSize(textSize);
    }
 
    //버튼을 손가락으로 터치했을 때 발생하는 이벤트
    @Override
    public boolean onTouchEvent(MotionEvent event) {
 
        int action = event.getAction();
 
        switch (action) {
            //버튼이 눌려졌을 때
            case MotionEvent.ACTION_DOWN:
                setBackgroundResource(R.drawable.b);
                break;
            //버튼이 때졌을 때
            case MotionEvent.ACTION_UP:
                setBackgroundResource(R.drawable.a);
                break;
        }
 
        invalidate();
        return true;
    }
}
 
cs


#dimen.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<dimen name="text_size">16dp</dimen>

</resources>

#파일 위치 및 경로


액션바 탭바 프레그먼트


#개념



#화면


#설정


왼족 네비게이션 바에서 values-> style.xml 들어가서 parent 부분을 NoActionBar로 해준다.

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

외부라이브러리 추가

file->project structure -> app -> dependenc.. ->  + 클릭 -> 라이브러리 디펜텐시스 com.android.support.design 클릭-> ok


build gradle 적용(맨밑에)

compile 'com.android.support:design:25.+'


#메인 엑티비티 레이아웃

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
 
 
    //전체 레이아웃 잡아줌
     <android.support.design.widget.CoordinatorLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
         //액션바 레이아웃
         <android.support.design.widget.AppBarLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
 
 
             //툴바정의
             <android.support.v7.widget.Toolbar
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:background="@color/colorPrimaryDark"
                 android:elevation="1dp"
                 android:id="@+id/toolbar">
             </android.support.v7.widget.Toolbar>
 
 
             //탭레이아웃(탭버튼을 담는다.)
             <android.support.design.widget.TabLayout
                 android:id="@+id/tabs"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:elevation="1dp"
                 android:background="@android:color/background_light"
                 app:tabMode="fixed"
                 app:tabGravity="fill"
                 app:tabTextColor="@color/colorPrimary"
                 app:tabSelectedTextColor="@color/colorAccent">
             </android.support.design.widget.TabLayout>
 
 
         </android.support.design.widget.AppBarLayout>
 
 
         //프레그먼트 넣을 곳
         <FrameLayout
             android:id="@+id/container"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             app:layout_behavior="@string/appbar_scrolling_view_behavior">
         </FrameLayout>
 
     </android.support.design.widget.CoordinatorLayout>
 
</RelativeLayout>
 
cs


#프레그먼트 1,2,3 레이아웃

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="fragment1"
        android:textSize="40dp"
        android:background="@android:color/holo_purple"
        />
 
</LinearLayout>
cs


#메인 엑티비티.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package me.happygate.myactionbar;
 
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
 
public class MainActivity extends AppCompatActivity {
 
    Fragment1 fragment1;
    Fragment2 fragment2;
    Fragment3 fragment3;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 
        //1툴바 설정
        Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
 
        //2xml 프래그먼트를 보여주기
 
        fragment1=new Fragment1();
 
        fragment2=new Fragment2();
 
        fragment3=new Fragment3();
 
        //프레그먼트를 메니져로 보여줌
        getSupportFragmentManager().beginTransaction().add(R.id.container,fragment1).commit();
 
 
 
 
        //3탭기능 구성
        TabLayout tabs=(TabLayout)findViewById(R.id.tabs);
        tabs.addTab(tabs.newTab().setText("친구"));
        tabs.addTab(tabs.newTab().setText("일대일채팅"));
        tabs.addTab(tabs.newTab().setText("기타"));
 
 
 
        //탭버튼을 클릭했을 때 프레그먼트 동작
        tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
 
                //선택된 탭 번호 반환
                int position =tab.getPosition();
 
                Fragment selected = null;
 
                if(position == 0 ){
 
                    selected = fragment1;
 
                }else if(position == 1 ){
 
                    selected =fragment2;
 
                }else if(position == 2 ){
 
                    selected =fragment3;
                }
 
                //선택된 프레그먼트로 바꿔줌
                getSupportFragmentManager().beginTransaction().replace(R.id.container, selected).commit();
            }
 
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
 
 
            }
 
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
 
            }
        });
 
    }
}
 
cs


#프레그먼트1,2,3 .java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package me.happygate.myactionbar;
 
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
 
public class Fragment1 extends Fragment {
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
 
        // xml 로 만들어준 프레그먼트를 자바 단에서 만들어줌
        ViewGroup rootGroup =(ViewGroup)inflater.inflate(R.layout.fragment1,container,false);
        return  rootGroup;
 
    }
}
 
cs




상대 레이아웃


#화면 




#소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
 
    <RelativeLayout
        android:id="@+id/r1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@id/r2"
        android:background="#fff000"></RelativeLayout>
 
 
    <RelativeLayout
        android:id="@+id/r2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_above="@id/r4"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="#4c219e"></RelativeLayout>
 
    <RelativeLayout
        android:id="@+id/r3"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/r1"
        android:background="#694430"></RelativeLayout>
 
    <RelativeLayout
        android:id="@+id/r4"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/r3"
        android:background="#00f957"></RelativeLayout>
 
 
    <RelativeLayout
        android:id="@+id/r5"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_above="@id/r4"
        android:layout_below="@id/r1"
        android:layout_toLeftOf="@id/r2"
        android:layout_toRightOf="@id/r3"
        android:background="#f45eff"></RelativeLayout>
 
 
</RelativeLayout>
cs


리니어 레이아웃 연습


#화면



#소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?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="vertical">
 
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3">
 
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#c62424"></LinearLayout>
 
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#fabebe"></LinearLayout>
 
    </LinearLayout>
 
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#0fe72f"></LinearLayout>
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#251f1d"></LinearLayout>
 
 
    </LinearLayout>
 
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#4b119bda"></LinearLayout>
 
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#b103e1"></LinearLayout>
 
    </LinearLayout>
 
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
 
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#69a16a">
 
            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#69a16a"
                android:text="home"
                android:textStyle="bold" />
 
        </LinearLayout>
 
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#fabebe">
 
            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#fabebe"
                android:text="home"
                android:textStyle="bold" />
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#f16060">
 
            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#f16060"
                android:text="home"
                android:textStyle="bold" />
 
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#154770">
 
            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#154770"
                android:text="home"
                android:textStyle="bold" />
        </LinearLayout>
 
    </LinearLayout>
 
 
</LinearLayout>
cs


프레그먼트로 이미지뷰 띄우기


#결과화면


#mainActivity.xml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
 
    <fragment
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name="me.happygate.myfragment2.ListFragment"
        android:id="@+id/listFragment" />
 
    <fragment
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name="me.happygate.myfragment2.ViewerFragment"
        android:id="@+id/viewFragment" />
 
</LinearLayout>
 
cs


#mainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package me.happygate.myfragment2;
 
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
 
public class MainActivity extends AppCompatActivity {
 
    ListFragment fragment1;
    ViewerFragment fragment2;
    FragmentManager manager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        manager = getSupportFragmentManager();
 
        //프래그먼트메니져로 xml에 정의된 프래그먼트 찾기
        fragment1 = (ListFragment) manager.findFragmentById(R.id.listFragment);
        fragment2 = (ViewerFragment) manager.findFragmentById(R.id.viewFragment);
 
    }
 
    public void onImageChange(int index){
 
        fragment2.setImage(index);
 
    }
}
 
cs



#listFragment.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="image1" />
 
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="image2" />
 
    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="image3" />
</LinearLayout>
cs


#listFragment.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package me.happygate.myfragment2;
 
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
 
/**
 * Created by kang on 2017-08-17.
 */
 
public class ListFragment extends Fragment {
    MainActivity activity;
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
 
        activity=(MainActivity)getActivity();
    }
 
    @Override
    public void onDetach() {
        super.onDetach();
        activity = null;
    }
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup rootView=(ViewGroup)inflater.inflate(R.layout.fragment_list,container,false);
 
 
        Button button =(Button)rootView.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
            activity.onImageChange(0);
 
            }
        });
 
 
        Button button2 =(Button)rootView.findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                activity.onImageChange(1);
            }
        });
 
 
        Button button3 =(Button)rootView.findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                activity.onImageChange(2);
            }
        });
 
 
        return rootView;
    }
}
 
cs


#viewFragment.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/a" />
</LinearLayout>
cs


#viewFragment.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package me.happygate.myfragment2;
 
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
 
/**
 * Created by kang on 2017-08-17.
 */
 
public class ViewerFragment extends Fragment {
 
    ImageView imageView;
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup rootView=(ViewGroup)inflater.inflate(R.layout.fragment_viewer,container,false);
 
         imageView = (ImageView)rootView.findViewById(R.id.imageView);
 
        return rootView;
    }
 
 
    public void setImage(int index){
 
        if (index==0){
            imageView.setImageResource(R.drawable.a);
        }else if(index==1){
            imageView.setImageResource(R.drawable.d);
        }else if (index==2){
            imageView.setImageResource(R.drawable.e);
        }
 
 
    }
}
 
cs


#사진파일은 drawable 폴더에


+ Recent posts