728x90
반응형
https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/

 

728x90
반응형
728x90
반응형

결과는 아래와 같다.

시간은 millisecond 단위.


millisecond CPU Memory Disk
Count Android Xamarin Android Xamarin Android Xamarin
평균 249.5 147.5 102.2 27 7708.1 12753.7
1 240 137 97 24 8321 13701
2 227 143 109 27 8048 13430
3 257 148 85 26 7737 13564
4 281 161 184 62 7792 13614
5 234 153 94 31 7713 13284
6 270 149 89 17 7524 11229
7 253 185 92 21 7471 12094
8 252 125 102 28 7889 12344
9 250 133 89 16 7318 12031
10 231 141 81 18 7268 12246



결론,

Cpu, Memory 속도는 Xamarin 이 빠르고

Disk 는 Android 가 빠르다


백만을 천만으로 했을때

Cpu 는 위 결과와 동일하게 Xamarin  이 두배 정도 빠르며

Memory 테스트는 Xamarin 으로 했을때는 결과가 나오는데 Android 로는 뻗어버린다.;

Disk 는 용량이 버티질 못할것 같아서 테스트 못했다.

 

테스트 apk 파일은 아래에...

AndroidTest1-debug-unaligned.apk

XamarinTest1.XamarinTest1-Signed.apk

비교파일.xlsx

 

728x90
반응형
728x90
반응형

이전에 만든 Tool Bar 에 메뉴를 넣어보겠습니다.

이전게시글(http://kjcoder.tistory.com/169)

 

1. 우선 메뉴에 사용될 아이콘들을 가져옵니다.

https://material.io/icons/

여기로 가면 쓸만한 아이콘들이 많이 있습니다.

drawable.zip

여기서 다루게될 아이콘들의 모음입니다.

원래 검은색인데 회색으로 변경하였습니다.

일단 준비는 끝났고 위 아이콘들을 drawable 폴더에 추가합니다.

 

2. 메뉴를 만듭니다.

Resource 폴더 하위에 menu 폴더를 하나만들고 xml 파일을 추가합니다. top_menu.xml 로 만듭니다. (이름은 맘대로)

내용은 아래와 같습니다.

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item
       android:id="@+id/menu_Add"
       android:icon="@drawable/ic_add_black_24dp"
       android:showAsAction="ifRoom"
       android:title="추가" />
  <item
       android:id="@+id/menu_Advanced"
       android:showAsAction="never"
       android:title="Visit Site" />
</menu>

첫번째 메뉴는 추가 메뉴입니다. + 모양의 아이콘으로 보여지게됩니다.

두번째 메뉴는 아이콘이 없는 환경 설정 메뉴로 popup 메뉴를 뜨게 할수 있습니다.

* showAsAction="ifRoom" => TollBar 공간이 있으면 메뉴 항목이 표시됩니다.

* showAsAction="never" => 환경설정 메뉴항목이 설정되는 곳으로 세개의 수직점으로 나타납니다.

미리 보기

 

3. 메뉴를 보이도록 합니다.

메뉴가 추가될 화면의 Activity 에 아래 코딩을 추가합니다.

public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.top_menus, menu);
    return base.OnCreateOptionsMenu(menu);
}

OnCreateOptionsMenu 메서드에서 메뉴 리소스를 지정할수 있게 합니다.

 

4. 메뉴 이벤트를 연결합니다.

public override bool OnOptionsItemSelected(IMenuItem item)
{
    Toast.MakeText(this, "Action selected: " + item.TitleFormatted, ToastLength.Short).Show();
    return base.OnOptionsItemSelected(item);
}

사용자가 메뉴항목을 클릭하면 OnOptionsItemSelected 메서드를 호출하고 선택한 메뉴 항목을 전달합니다.

여기서 메뉴 Action 처리를 할수 있습니다.

최종화면은 아래와 같이 나타납니다.

 

 

 

 

728x90
반응형
728x90
반응형

어플을 만들게 되면 아래 그림과 같이 상단에 Bar 가 하나 자리잡고 있습니다.

(Action Bar 가 없는 테마를 선택한 경우 보이지 않습니다.)

테마를 선택해서 없앨수는 있지만 이자리에 내가 만든 Tool Bar 를 넣는 방법을 소개하고자 합니다.

 

1. 테마 만들기

나만의 테마를 하나 만듭니다. 테마를 만드는 이유는 Action Bar  없애기 위해서라고 보면됩니다.

솔루션의 Resources/values/Style.xml 파일에 아래 코드를 작성합니다.

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:toolBarColor">#5A8622</item>
  </style>
</resources>

핵심은 windowActionBar false 로 하여 기존 Action Bar 를 제거하는것입니다.

windowNoTitle 는 제목 표시줄을 표시 않할꺼냐 인데 표지 안할꺼니 true 입니다. (NoTitle..)

toolBarColor  Tool Bar 의 배경색이 될 항목입니다.

Properties/AndroidManifest.xml 파일의 내용에서 아래 내용을 추가하여 위 정의한 테마를 적용시킵니다.

<application android:label="SMSConvey" android:theme="@style/MyTheme"></application>

기존 application 테그가 존재하면 굵게 표시된 부분만 추가하면 됩니다.

label 은 정의한 Tool Bar 에 표시될 내용입니다.

 

2. 상단에 보여질 Tool Bar 를 디자인 합니다.

Resources/layout toolbar.xml 들어 아래코드를 작성합니다.

<?xml version="1.0" encoding="utf-8"?>
<Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/actionBarSize"
    android:background="?android:attr/toolBarColor"
    android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar"/>

minHeight="?android:attr/actionBarSize" 는 기존 제거한 Action Bar 의 높이와 동일하게 설정하라는 의미입니다.

background="?android:attr/toolBarColor" 는 배경색을 위 테마만들때 설정한 배경색을 가져옵니다.

 

3. 정의Tool Bar Include

Resources/layout/Main.axml 에서 아래 굴게 표시된 부분을 추가합니다.

<?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">
    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />
    ...
    ...
 
</RelativeLayout

 

4. ToolBar 활성화

 MainActivity.cs 에서 OnCreate 부분에 아래 코딩을 추가합니다.

(아래 코딩은 빌드 단에서 에러가 안나므로 반드시 include 되었는지 확인합니다.)

var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
SetActionBar(toolbar);
ActionBar.Title = "SMSConvey";

이렇게 하게되면 아래 처럼 내가 정의한 툴바가 나타나게 됩니다.

다음시간에는 Tool Bar 에 메뉴를 넣어보겠습니다.

 

 

728x90
반응형
728x90
반응형

https://msdn.microsoft.com/ko-kr/library/mt488768.aspx

 

https://www.xamarin.com/forms

728x90
반응형
728x90
반응형
Uri uri = Uri.parse("content://mms/");
String selection = "_id = " + mmsId;
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
 
 
 
String selectionPart = "mid=" + mmsId;
Android.Net.Uri uri = Android.Net.Uri.parse("content://mms/part");
Android.Database.ICursor cursor = ContentResolver.Query(uri, null,
    selectionPart, null, null);
if (cursor.MoveToFirst())
{
    do
    {
        String partId = cursor.GetString(cursor.GetColumnIndex("_id"));
        String type = cursor.GetString(cursor.GetColumnIndex("ct"));
        if ("text/plain".Equals(type))
        {
            String data = cursor.GetString(cursor.GetColumnIndex("_data"));
            String body;
            if (data != null)
            {
                // implementation of this method below
                body = GetMmsText(partId);
            }
            else
            {
                body = cursor.GetString(cursor.GetColumnIndex("text"));
            }
        }
    } while (cursor.MoveToNext());
}

private string getMmsText(String id)
{
    Android.Net.Uri partURI = Android.Net.Uri.Parse("content://mms/part/" + id);
    Stream inputStream = null;
    Java.Lang.StringBuilder sb = new Java.Lang.StringBuilder();
    try
    {
        inputStream = ContentResolver.OpenInputStream(partURI);
        if (inputStream != null)
        {
            Java.IO.InputStreamReader isr = new Java.IO.InputStreamReader(inputStream, "UTF-8");
            Java.IO.BufferedReader reader = new Java.IO.BufferedReader(isr);
            string temp = reader.ReadLine();
            while (temp != null)
            {
                sb.Append(temp);
                temp = reader.ReadLine();
            }
        }
    }
    catch (IOException e) { }
    finally
    {
        if (inputStream != null)
        {
            try
            {
                inputStream.Close();
            }
            catch (IOException e) { }
        }
    }
    return sb.ToString();
}
 

 

728x90
반응형
728x90
반응형
1. 사용방법

2. sqlite-net 깃허브 소스
https://github.com/praeclarum/sqlite-net

3. mono.data.sqlite 설치방법

728x90
반응형
728x90
반응형

"obj\Debug\android\bin\packaged_resources" 파일이 없습니다
라는 오류는 빌드가 오류 났을때 발생되는 에러이다
출력창의 에러 내용을 모두 해결하면 된다.

오류를 다잡았는데도 오류가 발생되면

* SDK Manager 에서 아래 항목을 모두 설치한다.

Tools/
Tools/Android SDK Tools 25.1.1
Tools/Android SDK Plataform-tools 23.1
Tools/Android SDK Build-tools 23.0.1

Android 6.0/
Android 6.0/SDK
Android 6.0/ARM EABI v7a System Image

Android 5.1.1/
Android 5.1.1/SDK
Android 5.1.1/ARM EABI v7a System Image

Android 4.2.2/
Android 4.4.2/SDK
Android 4.4.2/ARM EABI v7a System Image

Android 4.0.3/
Android 4.0.3/SDK
Android 4.0.3/ARM EABI v7a System Image

Extras/
Extras/Android Support Library
Extras/Google USB Driver

 




참고
https://forums.xamarin.com/discussion/63356/the-file-obj-debug-android-bin-packaged-resources-does-not-exist

 

위 방법을 이용하니 디자이너도 잘 보인다.

728x90
반응형
728x90
반응형
// OK,Dialog팝업
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.SetTitle("확인");
alert.SetMessage("저장하시겠습니까?");
alert.SetPositiveButton("확인", SaveEvent);
alert.SetNegativeButton("취소", (senderAlert, args) => {});
Dialog dialog = alert.Create();
dialog.Show();

 private void SaveEvent(object sender, DialogClickEventArgs args)
{

 

// 단순 Dialog
public static void OpenDialogAction(Context context, string title, string content)
{
    Dialog dlg = new Dialog(context);
    TextView text = new TextView(context);
    text.Text = content;
    dlg.SetContentView(text);
    dlg.SetTitle(title);
    dlg.Show();
}

728x90
반응형
728x90
반응형
[Activity(Label = "TestActivity", MainLauncher = false, Icon = "@drawable/icon", WindowSoftInputMode = SoftInput.AdjustPan)]
public class TestActivity : Activity
{
}


WindowSoftInputMode = SoftInput.AdjustPan 을 넣으면 클릭이나 터치를 해야 입력 키보드가 나타난다.
728x90
반응형

+ Recent posts