'Computer'에 해당되는 글 40건

  1. 2018.07.27 [Android Studio] EditText - Java로 수정 가능/불가능하게 만들기(editable)
  2. 2018.07.27 [Android Studio] Admob 광고 달기 - 배너 광고, 전면 광고
  3. 2018.07.27 [Android Studio] 두 Fragment 간의 화면 전환 그리고 데이터 넘기기
  4. 2018.07.27 [Android Studio] ListView 줄(line)없애기
  5. 2018.07.27 [Android Studio] Intent, Bundle 그리고 Context 차이?
  6. 2018.07.27 [Android Studio] 차이점. 뭐가 달라? - invalidate(), invalidateViews(), notifyDataSetChanged()
  7. 2018.07.27 [Android Studio] 클립보드로 복사(Copy)하는 메소드
  8. 2018.07.27 [Android Studio] 문제 해결 - Circular dependencies cannot exist in RelativeLayout, android?
  9. 2018.07.27 [Android Studio] 'GoogleSignIn.silentSignIn' 어딨나요?
  10. 2018.07.27 Android EasyFlipView

[Android Studio] EditText - Java로 수정 가능/불가능하게 만들기(editable)

|

일단, XML에서 editable = "false" 속성을 넣었다면, 삭제하자. 이건 더 이상 사용하지 않는 방법이다.

Activity가 실행되고 나서 곧바로 비활성화를 시키려면, 다음과 같이 하면 된다.

여기서는 예로 titleET를 들었다. 제목을 나타내는 EditText이다.

titleET.setTag(titleET.getKeyListener()); titleET.setKeyListener(null);

그렇게 비활성 모드로 뜨고 나서 글을 수정해야한다. 이를 테면, EDIT 버튼을 눌렀으면 EditText가 활성화 되어야 할 것이다.

다음과 같이 활성화 시킬 수 있다.

titleET.setKeyListener((KeyListener) titleET.getTag());


And

[Android Studio] Admob 광고 달기 - 배너 광고, 전면 광고

|

참고해야할 사이트: https://developers.google.com/admob/android/quick-start

위 사이트에 가서 그냥 따라하면 되는데, 못 따라하는 분들이 계셔서 정리해보려고 한다.

일단, Get Started에 가서 보면

Gradle 세팅을 해야한다.

프로젝트 뷰 그레이들 설정( build.gradle(Project: 프로젝트명))으로 가서 allprojects를 찾은 뒤에 다음과 같이 추가한다.

*시작-끝 코멘트 사이만 신경쓰시면 됩니다.

allprojects { repositories { jcenter() // 추가해 줘야 할 부분 시작 maven { url "https://maven.google.com" } // 추가해 줘야 할 부분 끝 } }

앱 뷰 그레이들 설정( build.gradle(Module: app))으로 가서 dependencies에 다음을 추가합니다.

dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' // 추가해 줘야 할 부분 시작 implementation 'com.google.android.gms:play-services-ads:15.0.0' // 추가해 줘야 할 부분 끝 }

그 뒤에 sync를 해준다. ( 프로젝트 상단에 bar 하나가 나와서 Sync Now하라고 뜰 거다. sync 클릭해주면 된다. )

그럼 admob을 사용하기 위한 gradle 설정은 끝이 된 것이고 admob 라이브러리를 활용해 admob만 Java코드(혹은 XML과 같이(Java만으로도 설정 가능))로 구현만 해주면 된다.

* Activity와 Fragment는 좀 다르기 때문에 나눠서 설명하겠습니다.


배너 광고

자세한 것은 여기 참고하면 된다.
* 여기서 나온 unit ID는 테스트용이다.

- Activity: onCreated() 안에 다음과 같이 설정해준다.
멤버 변수('public class ClassName{'다음 줄에 정의 하는 부분)에 다음과 같이 mAdView를 정의 해준다.

private AdView mAdView;
// admob MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713"); mAdView = findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest);

- Fragment: onActivityCreated() 안에 다음과 같이 설정해준다.
Activity와 다른 점은 view를 지정해줘야 한다는 것과 context를 접근 할 때 this가 아니라 getContext()로 한다는 점이다.

private AdView mAdView; View view; // onActivityCreated()에서 사용하기 위함.
@Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_saved, null); // 멤버 필드에 정의된 변수에 저장하기 위함. return view; }
// admob MobileAds.initialize(getContext(), "ca-app-pub-3940256099942544~3347511713"); mAdView = view.findViewById(R.id.adView); // view.로 접근하여 findViewById를 해야함. AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest);

- XML 레이아웃 ( res/layout/xxx.xml ) 예시
레이아웃이야 뭐, 방법이 워낙 다양하니 적당히 해주시면 되겠지만, 개인적으로 RelativeLayout이 편하기 때문에 배너광고는 RelativeLayout만을 다음과 같이 사용합니다.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/themeColor" tools:context="org.koreanlab.origol.activity.NavigationActivity"> > <ListView android:id="@+id/article_listview_search_activity" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbarStyle="outsideOverlay" android:layout_above="@id/adView" /> <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" ads:adSize="SMART_BANNER" ads:adUnitId="ca-app-pub-3940256099942544/6300978111"> </com.google.android.gms.ads.AdView> </RelativeLayout>

간단히 설명하자면
R - RelativeLayout
X - 아무거나
A - Admob

RXAR 식으로 XML을 하고
X는 보통 LinearLayout/ScrollView/ListView로 하며 해당 속성에

android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/adView"

을 추가하면 알아서 배너 상단을 차지하게 됩니다.

배너를 넣기전에 작업하신 것은 저 세 가지 레이아웃에 그냥 짱박아 넣으시면 됩니다.

전면 광고
자세한 것은 여기를 참고하시면 되겠습니다.

전면 광고는 배너 광고보다 더 쉬울 수 있다. 전면! 이기 때문에 XML를 건들지 않아도 전체 화면에 광고를 뿌릴 수 있기 때문에 코드가 간결한 편이다.

사용될 Activity 혹은 Fragment 멤버 필드에 다음을 정의한다.

private InterstitialAd mInterstitialAd;


- Activity

MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713"); mInterstitialAd = new InterstitialAd(this); mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712"); mInterstitialAd.loadAd(new AdRequest.Builder().build());

이게 끝이다. 

- Fragment: this 대신 getContext()로 context를 얻는 것 빼곤 같다.

MobileAds.initialize(getContext(), "ca-app-pub-3940256099942544~3347511713"); mInterstitialAd = new InterstitialAd(getContext()); mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712"); mInterstitialAd.loadAd(new AdRequest.Builder().build());

- 전면 광고 실행하는 부분

Activity나 Fragment도 똑같이 다음과 같이 버튼이 있다면 버튼 안에 넣어 주면 된다.

mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); } else { Log.d("TAG", "The interstitial wasn't loaded yet."); } } });

화면이 넘어 갈 때 ( Activity 전환 ) 일 때, 전면 광고 실행 부분이 뒤로 가게 한다.

Intent intent = new Intent(getContext(), WriteActivity.class); startActivity(intent); if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); } else { Log.d("TAG", "The interstitial wasn't loaded yet."); }


And

[Android Studio] 두 Fragment 간의 화면 전환 그리고 데이터 넘기기

|

일단, 나는 1:1 대칭으로 아이템을 여러번 쓰기 싫어서 모든 item클래스에 다음 인터페이스를 상속한다.

public class XXXXItem implements Serializable{ // ... }

이렇게 하면 Intent(Acitivy에서)나 Bundle(Fragment에서)에서 putSerializeable()메소드를 사용해서 객체를 한 줄로 그냥 보내 버릴 수 있다.

// 줄 때 MessageItem item = ... ; // item를 만들어 데이터를 담는다. MessageItem은 직접 만든 데이터를 담는 클래스 MyFragment myFragment = new MyFragment(); // 화면이 전환 될 Frament, 전환 되면서 데이터를 보낼 거다. Bundle bundle = new Bundle(); // Activity의 Intent와 같은 녀석. 데이터를 들어날라 주는 역할. bundle.putSerializable("messageItem", item); // "messageItem"은 받을 때 사용될 string이름을 정한 것이다. myFragment.setArguments(bundle); // setArguments로 bundle을 세팅해준다. // 받을 때 Bundle bundle = getArguments(); // getArguments로 bundle 생성 bundle.getSerializable("messsageItem"); // 던져 줄 때 사용했던 string이름으로 받아 준다.


And

[Android Studio] ListView 줄(line)없애기

|

XML에서 ListView에 다음 속성을 넣어주면 된다.

android:divider="@null" android:dividerHeight="0dp"


And

[Android Studio] Intent, Bundle 그리고 Context 차이?

|

간단하게 설명하자면,

Intent와 Bundle은 비슷하다.

Intent는 Activity간에 혹은 Activity와 Fragment간에 사용되고
Bundle은 Fragment간에 데이터 전달을 위해 주로 사용이 된다.

Context는 여기를 참고

And

[Android Studio] 차이점. 뭐가 달라? - invalidate(), invalidateViews(), notifyDataSetChanged()

|

안드로이드 공식 문서인 View Invalidate에 따르면, ListView.invalidate()는 해당 뷰가 onDraw(android.graphics.Canvas)가 호출되어 다시 그려지게 된다.

ListView.invalidateViews()는 AbsListView invalidateViews에 자세히 설명되어있다..
모든 뷰가 새로 다시 뿌려진다. 그런데 뿌려지는 게 자식 뷰들까지 되어 버려 불필요한 자원을 낭비할 수 있게 된다..

보통은 데이터가 바뀔 때, BaseAdapter인터페이스를 상속 받아서 notifyDataSetChanged()를 사용한다.



And

[Android Studio] 클립보드로 복사(Copy)하는 메소드

|

이거 하나면 된다.

private void setClipboard(Context context, String text) { if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(text); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text); clipboard.setPrimaryClip(clip); } }


And

[Android Studio] 문제 해결 - Circular dependencies cannot exist in RelativeLayout, android?

|

RelativeLayout에서 id가 textview_a, textview_b인 TextView 두 개가 있다고 치자.

이 에러는 

textview_a가 above textview_b의 속성을 갖고 textview_b가 below textview_a의 속성을 갖은 것처럼 중복되는 속성을 정의했을 경우에 생기는 에러다.

그러므로 기준이 되는 둘 중 하나를 지워주면 문제가 해결된다.

And

[Android Studio] 'GoogleSignIn.silentSignIn' 어딨나요?

|

문서에서 잘못 표기 된 것 같다.

다음과 같이 설정하면 된다.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.server_client_id)) .requestEmail() .build(); GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(this, gso); googleSignInClient.silentSignIn().addOnCompleteListener(this, new OnCompleteListener<GoogleSignInAccount>() { @Override public void onComplete(@NonNull Task<GoogleSignInAccount> task) { handleSignInResult(task); } });


And

Android EasyFlipView

|

Android EasyFlipView

A quick and easy flip view through which you can create views with two sides like credit cards, poker cards etc.

Download : https://github.com/wajahatkarim3/EasyFlipView

And
prev | 1 | 2 | 3 | 4 | next