이번 예제는 회원가입 화면을 만드는 것입니다.

  1. 첫번째 화면에서 맨아래 Member Registration버튼을 누르면


  1. 다음과 같이 회원 가입 화면으로 이동하게 됩니다.



  1. 이 화면에서 아래와 같이 드롭다운 박스를 구현하고 라디오버튼도 구현합니다.



activity_register.xml

회원가입 화면을 구현하는 부분입니다.

<?xml version="1.0" encoding="utf-8"?>
<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="com.example.kch.registration_v2.RegisterActivity">

    <LinearLayout
        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"
            android:background="@color/colorPrimary"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Member Registration"
                android:textColor="#ffffff"
                android:textSize="30dp"
                android:textStyle="bold"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                />
        </LinearLayout>

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

            <EditText
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:hint="ID"
                android:layout_gravity="center"
                android:padding="10dp"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff"
                android:id="@+id/idText"
                android:drawableStart="@drawable/ic_person_black_24dp"
                android:drawableLeft="@drawable/ic_person_black_24dp"
                android:layout_marginTop="50dp"
                android:background="@color/colorPrimary"
                />

            <EditText
                android:inputType="textPassword"
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:hint="PASSWORD"
                android:layout_gravity="center"
                android:padding="10dp"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff"
                android:id="@+id/passwordText"
                android:drawableStart="@drawable/ic_lock_outline_black_24dp"
                android:drawableLeft="@drawable/ic_lock_outline_black_24dp"
                android:layout_marginTop="10dp"
                android:background="@color/colorPrimary"
                />

            <EditText
                android:inputType="text"
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:hint="E-mail"
                android:layout_gravity="center"
                android:padding="10dp"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff"
                android:id="@+id/emailText"
                android:drawableStart="@drawable/ic_mail_outline_black_24dp"
                android:drawableLeft="@drawable/ic_mail_outline_black_24dp"
                android:layout_marginTop="10dp"
                android:background="@color/colorPrimary"
                />
           
            <RadioGroup
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:id="@+id/genderGroup"
                android:layout_gravity="center_horizontal"
                android:orientation="horizontal"
                android:layout_marginTop="10dp"
                >
                <RadioButton
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:text="female"
                    android:id="@+id/genderWoman"
                    android:layout_weight="1"
                    android:checked="true"
                    />

                <RadioButton
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:text="male"
                    android:id="@+id/genderMan"
                    android:layout_weight="1"
                    />
            </RadioGroup>

            <Spinner
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"
                android:id="@+id/majorSpinner"
                ></Spinner>

            <Button
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:textSize="20dp"
                android:textStyle="bold"
                android:textColor="#ffffff"
                android:background="@color/colorPrimary"
                android:text="Register"
                android:layout_marginTop="10dp"
                android:layout_gravity="center"
                android:id="@+id/registerButton"
                />


        </LinearLayout>

    </LinearLayout>



</LinearLayout>


values/arrays.xml

다음은 스피너에 추가되는 값들입니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="major">
        <item>정보통신공학</item>
        <item>기계공학</item>
        <item>화학공학과</item>
    </string-array>


</resources>


LoginActivity.java

여기서 첫  로그인 화면에서 Member Registration버튼을 누르면  RegisterActivity로 가게 합니다.

package com.example.kch.registration_v2;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class LoginActivity extends AppCompatActivity {

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

        TextView registerButton = (TextView)findViewById(R.id.registerButton);

        //버튼이 눌리면 RegisterActivity로 가게함
        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
                LoginActivity.this.startActivity(registerIntent);
            }
        });

    }
}

 
RegisterActivity.java

다음과 같이 스피너에 데이터를 연결시켜주는 작업을 합니다.

package com.example.kch.registration_v2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class RegisterActivity extends AppCompatActivity {

    private ArrayAdapter adapter;
    private Spinner spinner;

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

        //스피너 객체 선언 및 리소스를 가져오는 부분
        spinner = (Spinner)findViewById(R.id.majorSpinner);
        adapter = ArrayAdapter.createFromResource(this, R.array.major, android.R.layout.simple_dropdown_item_1line);
        spinner.setAdapter(adapter);

    }
}




블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그




첫번째 예제는 다음과 같은 화면을 구성합니다.

이번 예제는 기능상의 구현없이 단순히 xml파일로 화면구성만 합니다.




activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<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="com.example.kch.registration_v1.LoginActivity">
   
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="225dp"
            android:orientation="vertical"
            android:background="@color/colorPrimary"
            >
            <ImageView
                android:layout_width="125dp"
                android:layout_height="125dp"
                android:layout_gravity="center"
                android:layout_marginTop="20dp"
                android:src="@drawable/univlogo"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Kyowon UNIV"
                android:textColor="#ffffff"
                android:textSize="25dp"
                android:textStyle="bold"
                android:layout_marginTop="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Registration Helper"
                android:textColor="#ffffff"
                android:textSize="18dp"
                android:textStyle="bold"
                />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
           
            <EditText
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:hint="ID"
                android:layout_gravity="center"
                android:padding="10dp"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff"
                android:id="@+id/idText"
                android:drawableStart="@drawable/ic_person_black_24dp"
                android:drawableLeft="@drawable/ic_person_black_24dp"
                android:layout_marginTop="50dp"
                android:background="@color/colorPrimary"
                />

            <EditText
                android:inputType="textPassword"
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:hint="PASSWORD"
                android:layout_gravity="center"
                android:padding="10dp"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff"
                android:id="@+id/passwordText"
                android:drawableStart="@drawable/ic_lock_outline_black_24dp"
                android:drawableLeft="@drawable/ic_lock_outline_black_24dp"
                android:layout_marginTop="10dp"
                android:background="@color/colorPrimary"
                />

            <Button
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:textSize="20dp"
                android:textStyle="bold"
                android:textColor="#ffffff"
                android:background="@color/colorPrimary"
                android:text="Login"
                android:layout_marginTop="10dp"
                android:layout_gravity="center"/>
           
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:textSize="18dp"
                android:layout_marginTop="10dp"
                android:text="Member Registration"
                android:id="@+id/registerButton"
                />


        </LinearLayout>
       
    </LinearLayout>


</LinearLayout>

drawable 폴더에 적당한 이미지를 구해다가 넣습니다.

또는 drawable 폴더를 오른쪽 마우스를 눌러서 New-Vector Asset으로 이미지를 골라서 선택합니다.






colors.xml

백그라운드 색을 지정하기 위한 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#039BE5</color>
    <color name="colorPrimaryDark">#0277BD</color>
    <color name="colorAccent">#546E7A</color>
</resources>


styles.xml

여기서는 타이틀바를 없애는 작업을 합니다.

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

</resources>


AndroidManifest.xml

메니페스트 파일에서는 위에서 설정한 스타일을 지정해줍니다.

<?xml version="1.0" encoding="utf-8"?>
    package="com.example.kch.registration_v1">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme.NoActionBar">
        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

Chapter 1. 재무제표로 기업을 선별하는 방법


1. 매출액이 증가하는 기업과 당기순이익이 증가하는 기업을 선택하자.

  가. 영업이익 = 매출액 - 매출원가 - 판매관리비(광고비, 임대료, 보험료 등)
  나. 당기순이익 = 영업이익 + 영업외수익 - 특별이익과 손실(환율, 이자) - 법인세

예시. 삼성전자 재무제표 및 주가 (네이버증권 홈페이지에서 확인 가능 또는 MTS앱)


아래를 보면 매출액이 증가하면 주가 또한 증가하게 된다.



2. 영업이익률이 최근들어서 올라가는 기업을 선택하자

영업이익률 =



3. ROE(Return On Equity)가 좋은 기업들을 선택하자

자기자본이익률(ROE) = 당기순이익 / (현재+직전자본총계 평균값) 䠼(%)
ROE는 자본대비 이익률이므로 높으면 높을수록 좋다.

예시. 삼성전자 업종 분석(네이버증권 종목분석-업종분석으로 확인 가능)



4. 부채비율이 적은 기업을 선택하자.

부채비율 = 총부채(빌린돈) / 총자본(내돈+빌린돈)
 - 부채비율이 50%이하면 매우 안정적이고 200%이상이면 불안정하다. 즉 돈을 기한내에 갚지못하면 부도가 날 수도 있다.

5. 배당을 주는 기업이면 더 좋다.

 - 배당이란 주주가 기업에 출자한 자본의 대가로 받는 이익배분이다. 즉 1주라도 가지고 있으면 배당금을 받을 수 있다.
 - 배당락일에 주식을 보유하고 있으면 배당금을 받을 수 있으며 보통 배당락은 12월 마지막주 주식거래일이 해당된다. 그래서 보통 배당락일에는 주식이 오른다.


 - 해당 기업이 배당을 주는지 보려면 시가배당률을 보면 된다.


만약 1주당 10000원인 주식이 있다고 하면 배당금을 500원을 주게 되면 시가 배당률은 5%가 되는 것이다.
  


  -  배당성향은 그 기업의 당기순이익에서 얼마나 배당금으로 주는지를 나타낸다.


블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그



회사 근처 24평 90년대완공 아파트 전세 1.5억.

역세권 신축 아파트 분양가 4.18억 -> 현시세 약5억

(이번 여름 입주 예정이나 전세줄지 드가살지 고민중)

현금/주식 합쳐진 증권게좌 잔고 1.5억.

차 없음.

재산 모은 비결

졸업이 빠른 국가에서 학석사 칼같이 마치고

한국에 23살에 전문연구요원으로 사회생활 시작.

26에 삼전 중고 신입으로 입사. 매번 최대치 성과급

꾸준히 경제와 주식 공부 병행.. 지금은 회사 소득보다

주식 소득이 월등히 더 많음.

꾸준히 월 1000정도 수익남


출처 : 블라인드 재테크 게시판
블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그



이전예제 

이전까지 했던 예제를 다음과 같이 예쁘게 만드는 작업입니다. 물론 기능은 동일합니다.

  1. 다음은 로그인 화면입니다.



  1. 다음은 로그인 후 화면입니다.



  1. 다음은 회원 계정 출력페이지입니다.




res/drawable/button_login.xml

login화면의 버튼 모양을 정의해주는 xml 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid
        android:color="@color/colorAccent"
        />
    <corners
        android:radius="10dp"></corners>
    <padding
        android:left="32dp"
        android:right="32dp"/>
</shape>

res/drawable/edittext_login.xml

login화면의 EditText모양을 정의해주는 xml 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid
        android:color="@color/colorWhite"/>
    <padding
        android:left="10dp"
        android:top="4dp"
        android:right="10dp"
        android:bottom="4dp"/>
    <corners
        android:radius="10dp"/>
</shape>

res/drawable/textview_main.xml

main화면에서 TextView 모양을 정의해주는 xml 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid
        android:color="#0054FF"/>
    <padding
        android:left="10dp"
        android:top="4dp"
        android:right="10dp"
        android:bottom="4dp"/>
</shape>

activity_login.xml

각 컴포넌트에 마진과 backgroud컬러 텍스트 컬러를 수정해줬습니다.

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:background="@color/colorPrimary"
    tools:context="com.example.kch.proj_manager_v9.LoginActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:textSize="60dp"
        android:text="Login Page"
        android:textColor="@color/colorWhite"
        android:textStyle="bold"
        android:layout_margin="50dp"
        />

    <EditText
        android:id="@+id/idText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="ID"
        android:inputType="textPersonName"
        android:gravity="center"
        android:textColorHint="@color/colorGray"
        android:background="@drawable/edittext_login"
        />

    <EditText
        android:id="@+id/passwordText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="password"
        android:inputType="textPassword"
        android:gravity="center"
        android:textColorHint="@color/colorGray"
        android:background="@drawable/edittext_login"

        />

    <Button
        android:id="@+id/loginbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:text="login"
        app:layout_constraintTop_toBottomOf="@+id/passwordText"
        android:gravity="center"
        android:background="@drawable/button_login"
        android:textColor="@color/colorWhite"
        android:layout_gravity="center_horizontal"
        />

    <TextView
        android:id="@+id/registerbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="register"
        android:textAppearance="@style/TextAppearance.AppCompat.Button"
        android:layout_gravity="center"
        android:textColor="@color/colorWhite"
        />
</LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:background="@color/colorPrimary"
    tools:context="com.example.kch.proj_manager_v9.MainActivity">

    <TextView
        android:id="@+id/WelcomeMessage"
        android:layout_width="335dp"
        android:layout_height="42dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="33dp"
        android:text="Welcome  "
        app:layout_constraintHorizontal_bias="0.515"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:background="@drawable/textview_main"
        android:gravity="center"
        android:textColor="@color/colorWhite"

        />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="333dp"
        android:layout_height="48dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="12dp"
        android:text="ID"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        app:layout_constraintHorizontal_bias="0.514"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/WelcomeMessage"
        android:textColor="@color/colorWhite"
        />

    <TextView
        android:id="@+id/idText"
        android:layout_width="333dp"
        android:layout_height="48dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="73dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintHorizontal_bias="0.514"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/WelcomeMessage"
        android:textColor="@color/colorWhite"
        />

    <TextView
        android:id="@+id/textView0"
        android:layout_width="333dp"
        android:layout_height="48dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="132dp"
        android:text="Your Password"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        app:layout_constraintHorizontal_bias="0.514"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/WelcomeMessage"
        android:textColor="@color/colorWhite"
        />

    <TextView
        android:id="@+id/passwordText"
        android:layout_width="333dp"
        android:layout_height="48dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="195dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintHorizontal_bias="0.514"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/WelcomeMessage"
        android:textColor="@color/colorWhite"
        />



    <Button
        android:id="@+id/manageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:text="Manage"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/passwordText"
        app:layout_constraintVertical_bias="0.085"
        android:background="@drawable/button_login"
        />

</android.support.constraint.ConstraintLayout>


activity_management.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context="com.example.kch.proj_manager_v9.ManagementActivity">

   <LinearLayout
       android:layout_width="368dp"
       android:layout_height="495dp"
       android:orientation="vertical"
       android:background="#d1d1d1"
       tools:layout_editor_absoluteY="8dp"
       tools:layout_editor_absoluteX="8dp">

       <EditText
           android:id="@+id/search"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:hint="search"

           />

       <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/listView"
            android:layout_marginTop="10dp"
            android:layout_marginRight="15dp"
            android:layout_marginLeft="15dp"
            android:dividerHeight="10dp"
            android:divider="#d1d1d1">
        </ListView>
</LinearLayout>
</android.support.constraint.ConstraintLayout>

activity_register.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context="com.example.kch.proj_manager_v9.RegisterActivity">

    <EditText
        android:id="@+id/idText"
        android:layout_width="342dp"
        android:layout_height="41dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="id"
        android:inputType="textPersonName"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/passwordText"
        android:layout_width="346dp"
        android:layout_height="44dp"
        android:ems="10"
        android:inputType="textPassword"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="10dp"
        app:layout_constraintTop_toBottomOf="@+id/idText" />

    <EditText
        android:id="@+id/nameText"
        android:layout_width="346dp"
        android:layout_height="41dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="12dp"
        android:ems="10"
        android:hint="name"
        android:inputType="textPersonName"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/passwordText" />

    <EditText
        android:id="@+id/ageText"
        android:layout_width="340dp"
        android:layout_height="44dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="10dp"
        android:ems="10"
        android:hint="age"
        android:inputType="textPersonName"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/nameText" />

    <Button
        android:id="@+id/registerbtn"
        android:layout_width="248dp"
        android:layout_height="47dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:text="register"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/ageText"
        android:background="@drawable/button_login"
        android:textColor="@color/colorWhite"
        />
</android.support.constraint.ConstraintLayout>


res/values/colors.xml

사용하는 폰트나 배경색에 대한 정의를 하는 xml입니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#039BE5</color>
    <color name="colorPrimaryDark">#0277BD</color>
    <color name="colorAccent">#2478FF</color>
    <color name="colorWhite">#FFFFFF</color>
    <color name="colorGray">#909090</color>
</resources>

res/values/styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <!--프로젝트 완성 강의때 추가함 AndroidManifest.xml파일에서 사용됨-->
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

</resources>

마지막으로 위 styles.xml 에 적용한 테마를 적용하기 위해 다음과 같이 AndroidManifest.xml파일을 수정합니다.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
    package="com.example.kch.proj_manager_v9">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"

        android:theme="@style/AppTheme.NoActionBar>  이 라인이 수정되었습니다.
        <activity android:name="com.example.kch.proj_manager_v9.LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.example.kch.proj_manager_v9.RegisterActivity" />
        <activity android:name="com.example.kch.proj_manager_v9.MainActivity" />
        <activity android:name="com.example.kch.proj_manager_v9.ManagementActivity"></activity>
    </application>

</manifest>



블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그



이전예제 


이번에는 관리자 계정으로 원하는 계정을 검색하는 기능을 추가하는 예제입니다.


  1. 먼저 admin으로 로그인을 합니다.



  1. 여기서 MANAGE 버튼을 누릅니다.




  1. search창에서 aa를 검색해봅시다.




  1. aa로 검색하면 다음과 같이 aa계정이 검색됩니다. 그후 삭제 버튼을 누르고 다시 사용자 계정 리스트를 보면



  1. 다음과 같이 aa계정이 삭제됬음을 알 수 있습니다.




activity_management.xml


여기서 검색창으로 사용할 EditText를 추가해줍니다.


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

<android.support.constraint.ConstraintLayout 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"

    tools:context="com.example.kch.proj_manager_v8.ManagementActivity">

   <LinearLayout

       android:layout_width="368dp"

       android:layout_height="495dp"

       android:orientation="vertical"

       android:background="#d1d1d1"

       tools:layout_editor_absoluteY="8dp"

       tools:layout_editor_absoluteX="8dp">

       <EditText

           android:id="@+id/search"

           android:layout_width="match_parent"

           android:layout_height="wrap_content"

           android:hint="search"

           />

       <ListView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:id="@+id/listView"

            android:layout_marginTop="10dp"

            android:layout_marginRight="15dp"

            android:layout_marginLeft="15dp"

            android:dividerHeight="10dp"

            android:divider="#d1d1d1">

        </ListView>

</LinearLayout>

</android.support.constraint.ConstraintLayout>



ManagementActivity.java


위에서 추가한 EditText 객체를 만들고 리스너를 등록합니다.


package com.example.kch.proj_manager_v8;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.text.Editable;

import android.text.TextWatcher;

import android.widget.EditText;

import android.widget.ListView;

import android.content.Intent;

import org.json.JSONArray;

import org.json.JSONObject;

import java.util.ArrayList;

import java.util.List;

public class ManagementActivity extends AppCompatActivity {

    private ListView listView;

    private UserListAdapter adapter;

    private List<User> userList;

    private List<User> saveList;//회원검색 기능용 복사본

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_management);

/*        TextView userListTextView = (TextView)findViewById(R.id.listView);

        //ManagementActivity MainActivity에서 호출되므로 호출시 넘겨준 데이터를 뿌려주는 역할을 한다

        Intent intent = getIntent();

        //intent.putExtra("userList", result); 에서 userList 저장했으므로 아래와 같이 쓰게됨

        userListTextView.setText(intent.getStringExtra("userList"));*/

        Intent intent = getIntent();

        listView = (ListView)findViewById(R.id.listView);

        userList = new ArrayList<User>();

        saveList = new ArrayList<User>();

        //어댑터 초기화부분 userList 어댑터를 연결해준다.

        //회원 삭제 관리자 기능 아래 부분 수정됨

        //adapter = new UserListAdapter(getApplicationContext(), userList);

        adapter = new UserListAdapter(getApplicationContext(), userList, this, saveList);// 수정됨

        listView.setAdapter(adapter);

        try{

            //intent 값을 가져옵니다 이때 JSONObject타입으로 가져옵니다

            JSONObject jsonObject = new JSONObject(intent.getStringExtra("userList"));

            //List.php 웹페이지에서 response라는 변수명으로 JSON 배열을 만들었음..

            JSONArray jsonArray = jsonObject.getJSONArray("response");

            int count = 0;

            String userID, userPassword, userName, userAge;

            //JSON 배열 길이만큼 반복문을 실행

            while(count < jsonArray.length()){

                //count 배열의 인덱스를 의미

                JSONObject object = jsonArray.getJSONObject(count);

                userID = object.getString("userID");//여기서 ID 대문자임을 유의

                userPassword = object.getString("userPassword");

                userName = object.getString("userName");

                userAge = object.getString("userAge");

                //값들을 User클래스에 묶어줍니다

                User user = new User(userID, userPassword, userName, userAge);

                if(!userID.equals("admin"))//관리자계정은 삭제하지않게 하기위해서

                {

                    userList.add(user);//리스트뷰에 값을 추가해줍니다

                    saveList.add(user);//여기도 똑같이 값을 추가해줍니다. 회원검색기능용

                }

                count++;

            }

        }catch(Exception e){

            e.printStackTrace();

        }

        EditText search = (EditText)findViewById(R.id.search);

        search.addTextChangedListener(new TextWatcher() {

            @Override

            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                searchUser(charSequence.toString());//회원 검색 기능용

            }

            @Override

            public void afterTextChanged(Editable editable) {

            }

        });

    }

    public void searchUser(String search){

        userList.clear();

        for(int i = 0; i < saveList.size(); i++){

            if(saveList.get(i).getUserID().contains(search)){//contains메소드로 search 값이 있으면 true 반환함

                userList.add(saveList.get(i));

            }

        }

        adapter.notifyDataSetChanged();//어댑터에 값일 바뀐것을 알려줌

    }

}



UserListAdapter.java


saveList는 원래 사용자계정 리스트의 원본이고 userList는 실제 리스트뷰로 보여주는 사용자계정 리스트이므로


그점에 유의해서 아래와 같이 구현합니다.


package com.example.kch.proj_manager_v8;

import android.app.Activity;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.TextView;

import com.android.volley.RequestQueue;

import com.android.volley.Response;

import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

import java.util.List;

/**

 * Created by kch on 2018. 2. 17..

 */

public class UserListAdapter extends BaseAdapter {

    private Context context;

    private List<User> userList;

    private Activity parentActivity;//회원삭제 강의때 추가

    private List<User> saveList;

    //여기서 Actvitivy parentActivity 추가됨 회원삭제 관리자기능 예제

    public UserListAdapter(Context context, List<User> userList, Activity parentActivity, List<User> saveList){

        this.context = context;

        this.userList = userList;

        this.parentActivity = parentActivity;//회원삭제 강의때 추가

        this.saveList = saveList;//회원검색 강의때 추가

    }

    //출력할 총갯수를 설정하는 메소드

    @Override

    public int getCount() {

        return userList.size();

    }

    //특정한 유저를 반환하는 메소드

    @Override

    public Object getItem(int i) {

        return userList.get(i);

    }

    //아이템별 아이디를 반환하는 메소드

    @Override

    public long getItemId(int i) {

        return i;

    }

    //가장 중요한 부분

    //int i 에서 final int i 바뀜 이유는 deleteButton.setOnClickListener에서 값을 참조하기 때문

    @Override

    public View getView(final int i, View view, ViewGroup viewGroup) {

        View v = View.inflate(context, R.layout.user, null);

        //뷰에 다음 컴포넌트들을 연결시켜줌

        //final추가 안붙이면 에러남 리스너로 전달하고 싶은 지역변수는 final 처리해야됨

        final TextView userID = (TextView)v.findViewById(R.id.userID);

        TextView userPassword = (TextView)v.findViewById(R.id.userPassword);

        TextView userName = (TextView)v.findViewById(R.id.userName);

        TextView userAge = (TextView)v.findViewById(R.id.userAge);

        userID.setText(userList.get(i).getUserID());

        userPassword.setText(userList.get(i).getUserPassword());

        userName.setText(userList.get(i).getUserName());

        userAge.setText(userList.get(i).getUserAge());

        //이렇게하면 findViewWithTag 있음 없어도 되는 문장임

        v.setTag(userList.get(i).getUserID());

        //삭제 버튼 객체 생성

        Button deleteButton = (Button)v.findViewById(R.id.deleteButton);

        deleteButton.setOnClickListener(new View.OnClickListener(){

            @Override

            public void onClick(View view) {

                //4. 콜백 처리부분(volley 사용을 위한 ResponseListener 구현 부분)

                Response.Listener<String> responseListener = new Response.Listener<String>(){

                    @Override

                    public void onResponse(String response) {

                        try{

                            JSONObject jsonResponse = new JSONObject(response);

                            boolean success = jsonResponse.getBoolean("success");

                            //받아온 값이 success 정상적으로 서버로부터 값을 받은 것을 의미함

                            if(success){

                                userList.remove(i);//리스트에서 해당부분을 지워줌

                                //saveList 찾아서 해줘야됨 이게 기준이기 때문임

                                for(int i = 0; i < saveList.size(); i++){

                                    if(saveList.get(i).getUserID().equals(userID.getText().toString())){

                                        saveList.remove(i);

                                        break;

                                    }

                                }

                                notifyDataSetChanged();//데이터가 변경된 것을 어댑터에 알려줌

                            }

                        }

                        catch(Exception e){

                            e.printStackTrace();

                        }

                    }

                };

                //volley 사용법

                //1. RequestObject 생성한다. 이때 서버로부터 데이터를 받을 responseListener 반드시 넘겨준다.

                //위에서 userID final 선언해서 아래 처럼 가능함

                DeleteRequest deleteRequest = new DeleteRequest(userID.getText().toString(), responseListener);

                //2. RequestQueue 생성한다.

                //여기서 UserListAdapter Activity에서 상속받은 클래스가 아니므로 Activity값을 생성자로 받아서 사용한다

                RequestQueue queue = Volley.newRequestQueue(parentActivity);

                //3. RequestQueue RequestObject 넘겨준다.

                queue.add(deleteRequest);

            }//onclick

        });

        //만든뷰를 반환함

        return v;

    }

}





블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그



이전예제 


이번에는 저번 강의때 했던 회원목록을 출력후 회원 삭제 기능을 추가하는 예제입니다.

  1. 먼저 관리자 계정인 admin 계정으로 로그인을 합니다.





  1. 그 다음 MANAGE 버튼을 눌러 관리자페이지로 들어갑니다.



  1. 다음과 같이 현재 계정리스트를 출력하고 바로 옆에 삭제 버튼이 있습니다. 삭제 버튼을 누르면



  1. 해당 계정은 삭제하게 됩니다.



  1. 실제 데이터베이스를 봐도 admin계정을 제외하고 gakari1계정만 남아있는 것을 볼 수 있습니다.



예제 

  1. 먼저 다음의 레이아웃을 만들기 위해 user.xml 파일을 수정합시다.




user.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:background="#ffffff"
    >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        >
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="삭제"
            android:background="#00a7f5"
            android:textColor="#fff"
            android:textSize="18dp"
            android:id="@+id/deleteButton"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/userID"
            android:text="ID"
            android:textSize="20dp"
            android:textColor="#00a7f5"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/userPassword"
            android:text="PASSWORD"
            android:textSize="20dp"
            android:textColor="#f92a3f"
            />
        <<