안드로이드에서 텍스트뷰를 사용해 보면 텍스트 뷰 내뷰에 기본 패딩이 있어

디자인 요구사항을 정확히 반영할 수 없는 경우가 있습니다.

다음과 같이 패딩을 제거해 줄 수 있습니다.


xml에서 적용

<TextView
    android:id="@+id/textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:includeFontPadding="false"/>
cs



코드에서 적용

java

textView.setIncludeFontPadding(false);
cs


c#

textview.SetIncludeFontPadding(false);
cs


코드나 xml 중 한 곳만 적용해 주면 됩니다.

적용한 모습이 기본 패딩이 사라진 텍스트뷰인데 이래도 요구사항에 맞지 않는다면,

추가로 마이너스 패딩을 주는 방법 등도 있으나 추천하는 방법은 아닙니다.



16년 12월 추가 : android:includeFontPadding="false" 가 Default 로 이미 적용되어 있는 경우도 있는 것 같습니다. 패치로 인한 것인지 특정 상황에서 그런 것인지는 아직 확인하지 않았습니다. 애매한 건 명시적으로 코딩하는게 좋으니 확인시까진 매번 false로 설정할 생각합니다.


참고 : https://developer.android.com/reference/android/widget/TextView.html


Posted by 안드로메다에서 온 프로그래머
final View view = View;
...
view.post(new Runnable() {
            @Override
            public void run() {
                view.getHeight(); //height is ready
            }
        });

Java에서는 new Runnable등을 이용해 익명 클래스를 사용할 수 있습니다.

하지만 C#은 '일단은' 익명 클래스를 허용하지 않습니다. 

그럼 이런 코드는 Xamarin.Android에서는 어떻게 사용할까요?


private IRunnable fRunnable;

view.Post(fRunnable);

fRunnable = new Runnable(() => {

    view.Height;

});

일단 이런 식으로 IRunnable를 사용해서 뭔가 기분은 이상하지만 일단 구현은 가능합니다(..) 

당장 급하실때만 사용 해 주세요.


Posted by 안드로메다에서 온 프로그래머

Manifests

Xamarin.Android의 Manifests설정은 Java와 약간, 아니 좀 많이 다릅니다.

Java Manifests의 <activity ~ /> 부분이 아래와 같이 사실상 각 cs파일 상단에 들어간다고 생각하시면 됩니다.

[Activity(Label = "자마린 ㄴㄴ", MainLauncher = true, Icon = "@drawable/icon")]

Xamarin으로 Android를 처음 만난 분을 위해 설명하자면,

Lable은 액티비티의 타이틀, MainLauncher는 앱 시작 페이지를 이 액티비티로 지정(당연히 true지정된 액티비티는 한 앱에 하나만 존재해야 합니다, Icon은 액티비티의 아이콘입니다.


Button

//버튼 선언

Button button = FindViewById<Button>(Resource.Id.Button);

//클릭 이벤트 등록은 자바의 리스너가 아닌 Event방식을 사용합니다

//이벤트 등록 방식 1번 button.Click += (object sender, EventArgs e) => {     Console.WriteLine("button이 눌러졌습니다"); //로그에 찍힙니다. log.d도 가능. };


//이벤트 등록 방식 2번, delegate를 이용해 간단한 처리를 한줄에 구현합니다.

button.Click += delegate { Console.WriteLine("button이 눌러졌습니다"); };


//이벤트 등록 방식 3번, OnCreate등에서 이벤트 메소드만 지정하는 방식입니다

//여러 버튼이 하나의 동작을 공유하는 것도 가능합니다

button.Click += button_Click;

void button_Click(object sender, EventArgs e)

{

//동작

}


//응용. 리스트뷰의 경우.

listView.ItemClick += delegate(object sender, AdapterView.ItemClickEventArgs e) \

{

//응용2. 클릭된 아이템의 text를 얻는다. custom ListView일 경우에는

//GetItemAtPosition의 재정의가 필요.

String text = listView.GetItemAtPosition(e.Position);

};


Dialog

//translatedNumber이라는 변수에 저장된 번호로 전화거는 다이얼로그 예제

var callDialog = new AlertDialog.Builder(this);

callDialog.SetMessage("Call" + translatedNumber + "?");//이 번호로 전화할건가?셋 메세지 callDialog.SetNeutralButton("Call", delegate {     var callIntent = new Intent(Intent.ActionCall);//전화 인텐트 callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber)); StartActivity(callIntent); });


//List형식의 다이얼로그 예제


string[] titleMenu = { "사과", "메론" };

AlertDialog.Builder alert = new AlertDialog.Builder(activity);

alert.SetTitle("먹을 과일 선택"); //제목

alert.SetItems(titleMenu, (o, e) => //object, sender

{ // ↑ string xml 파일의 리스트를 여기에 써 줘도 됩니다.

//사과0,메론1

if (e.Which == 0)

{

System.Console.WriteLine("사과를 먹었습니다");

}

else if (e.Which == 1)

{

System.Console.WriteLine("메론을 먹었습니다");

}

});

alert.Show();


//다이얼로그 밖을 터치해서 닫을 수 있는 다이얼로그

//당연히 그런 거 아니야? 라고 생각할 수 있지만, Create 없이 그냥 바로 생성하면

//일부 안드로이드 버전에선 잘 되는데 일부에선 해당 기능이 동작하지 않는다....

//고객에게 간 버전에서만 안 될수 있다는 이야기.

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.SetTitle("정말 삭제하시겠습니까?");

builder.SetPositiveButton("예", delegate{ //positive work });

builder.SetNegativeButton("아니오", delegate { });

AlertDialog alert = builder.Create();

alert.SetCancelable(true);//취소 가능한 다이얼로그로 설정

alert.SetCanceledOnTouchOutside(true);//화면 밖을 터치해서 취소가 가능하게 설정

alert.Show();



다이얼로그 참조 링크 여기


기타 Java로 Android 개발하던 개발자가 C#으로 개발할 때 헷갈릴만한 사항들 메모.


커스텀 레이아웃 네임스페이스는 apk/res 가 아닌 apk/lib를 써야 한다

xmlns:yourApp="http://schemas.android.com/apk/lib/com.yourAppPackege.yourClass"


xml에서 커스텀 레이아웃을 사용할때는 네임스페이스를 사용해야 한다

패키지.경로.클래스명

EAppAndroid.Protype.LeftDrawerMenu2 

<EAppAndroid.Protype.LeftDrawerMenu2.OpendCheckLinearLayout



프래그먼트에서 어레이 어댑터 만들기

 ArrayAdapter adapter = new ArrayAdapter<string>(Activity,Android.Resource.Layout.SimpleListItem1, items);

다음과같이 this가 아닌 Activiti로 해줘야 한다

참고 http://arteksoftware.com/androids-built-in-list-item-layouts/

Posted by 안드로메다에서 온 프로그래머