728x90
반응형

[개발언어 : Xamarin.Forms, C#]

커피 모바일 주문 앱

1. ​아임포트 이용한 결제 처리

2. 구글지도를 이용한 매장과의 거리측정

3. 맴버십(쿠폰결제)

Android

https://play.google.com/store/apps/details?id=com.auosms.br

 

브라운래빗 (Brown Rabbit) - Google Play 앱

브라운래빗의 음료와 와플을 앱으로 주문하세요.

play.google.com

iOS

https://apps.apple.com/kr/app/id1529981963

 

‎브라운래빗

‎맛있는 차와 와플, 커피를 주문할 수 있는 브라운래빗(Brown Rabbit) 앱입니다. 앱에서 미리 주문하고, 매장을 방문하여 기다림없이 음료와 디저트를 즐기세요~

apps.apple.com

728x90
반응형
728x90
반응형

컨트롤의 Background 를 Transparent 로 하게되면

해당 컨트롤 뒤쪽에 배치된 컨트롤들에 마우스 오버이벤트나 툴팁처리를 한경우 작동하지 않게됩니다.

하지만 Background 를 {x:Null} 로 지정하게되면

뒤쪽에 배치된 컨트롤들의 이벤트 처리가 가능해 집니다.

 

아래처럼 {x:Null} 로 된 경우 ToolTip 이 제대로 표시되지만 

    <Grid>
        <Label Content="null 과 transoarent" ToolTip="ToolTip!!" Height="30" Width="300"/>
        <Border Name="Button1" Height="30" Width="300" BorderBrush="Yellow" Background="{x:Null}" BorderThickness="1"/>
    </Grid>

아래처럼 Transparent 로 된 경우 ToolTip 이 표시되지 않습니다.

    <Grid>
        <Label Content="null 과 transoarent" ToolTip="ToolTip!!" Height="30" Width="300"/>
        <Border Name="Button1" Height="30" Width="300" BorderBrush="Yellow" Background="Transparent" BorderThickness="1"/>
    </Grid>

728x90
반응형
728x90
반응형

App 에서 위치 정보를 사용하는 경우 사용자가 위치 허용을 하지 않았을때


Android 는 앱을 재시작하면 권한을 묻는 화면이 떠 권한을 허용할수 있습니다.

 

하지만 iOS 는 앱을 재시작하더라도 권한을 묻는화면이 뜨지않고

셋팅창에서 직접 위치 허용을 해줘야합니다.

 

이때 코드단에서 셋팅창으로 이동하고 싶을때 예시입니다.

 

DependencyService 를 이용하여

 

아래 처럼 코딩하면 앱 셋팅창으로 이동할 수 있습니다.

 

 

 

            if (!CLLocationManager.LocationServicesEnabled)

            {

                if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))

                {

                    UIApplication.SharedApplication.OpenUrl(new NSUrl("App-Prefs:root=General"));

                }

                else

                {

                    UIApplication.SharedApplication.OpenUrl(new NSUrl("prefs:root=General"));

                }

            }

            else if (CLLocationManager.Status == CLAuthorizationStatus.Denied ||

                     CLLocationManager.Status == CLAuthorizationStatus.NotDetermined ||

                     CLLocationManager.Status == CLAuthorizationStatus.Restricted)

            {

                UIApplication.SharedApplication.OpenUrl(new NSUrl(UIApplication.OpenSettingsUrlString));

            }

 

 

 

 

 

728x90
반응형
728x90
반응형

http://www.rw-designer.com/cursor-library

 

Open Cursor Library - 122631 cursors

 

www.rw-designer.com

 

www.deviantart.com/topic/customization

 

DeviantArt - Discover The Largest Online Art Gallery and Community

DeviantArt is the world's largest online social community for artists and art enthusiasts, allowing people to connect through the creation and sharing of art.

www.deviantart.com

 

728x90
반응형
728x90
반응형

Gradient 를 파랑(0) 초록(0.5) 노랑(1) 으로 표현을 한 경우

% 에 따른 색상을 구할때 사용한다.

 

        #region GetColorByOffset(double)

        /// <summary>

        /// Gradient 색의 offset 값을 구합니다.

        /// </summary>

        /// <param name="offset"></param>

        /// <returns></returns>

        private Color GetColorByOffset(double offset)

        {

            GradientStopCollection collection = new GradientStopCollection(3);

            collection.Add(new GradientStop(Colors.Blue, 0));

            collection.Add(new GradientStop(Colors.Green, 0.5));

            collection.Add(new GradientStop(Colors.Yellow, 1));

 

            GradientStop[] stops = collection.OrderBy(x => x.Offset).ToArray();

            if (offset <= 0) return stops[0].Color;

            if (offset >= 1) return stops[stops.Length - 1].Color;

            GradientStop left = stops[0], right = null;

            foreach (GradientStop stop in stops)

            {

                if (stop.Offset >= offset)

                {

                    right = stop;

                    break;

                }

                left = stop;

            }

 

            //Debug.Assert(right != null);

            offset = Math.Round((offset - left.Offset) / (right.Offset - left.Offset), 2);

            byte a = (byte)((right.Color.A - left.Color.A) * offset + left.Color.A);

            byte r = (byte)((right.Color.R - left.Color.R) * offset + left.Color.R);

            byte g = (byte)((right.Color.G - left.Color.G) * offset + left.Color.G);

            byte b = (byte)((right.Color.B - left.Color.B) * offset + left.Color.B);

            return Color.FromArgb(a, r, g, b);

        }

        #endregion

 

728x90
반응형
728x90
반응형

전면/배너 광고를 넣는 예제 소스입니다.

 

Android 는 AndroidManifest.xml 과 AdBannerRenderer 에

iOS 는 Info.plist, AdBannerRenderer 에

광고 관련 ID 를 수정해야합니다.

 

https://github.com/kei-soft/AdMobSample

 

728x90
반응형
728x90
반응형

using System;

using System.Threading;

using System.Threading.Tasks;

 

using Android.Content;

using Android.Webkit;

 

using AUOSMS.APP.Controls;

using AUOSMS.APP.Droid.Renderers;

 

using Xamarin.Forms;

using Xamarin.Forms.Platform.Android;

 

[assembly: ExportRenderer(typeof(WebViewer), typeof(WebViewRender))]

namespace AUOSMS.APP.Droid.Renderers

{

    public class WebViewRender : WebViewRenderer

    {

        public WebViewRender(Context context) : base(context)

        { }

 

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)

        {

            base.OnElementChanged(e);

 

            if (Control == null) return;

 

            // Cache Clear

            Control.ClearCache(true);

            Control.Settings.SetAppCacheEnabled(false);

            Control.Settings.CacheMode = Android.Webkit.CacheModes.NoCache;

 

            // JavaScript 허용

            Control.Settings.JavaScriptEnabled = true;

 

            // Cookie 허용

            CookieManager cookieManager = CookieManager.Instance;

            cookieManager.SetAcceptCookie(true);

            cookieManager.SetAcceptThirdPartyCookies(Control, true);

        }

    }

}

 

* 참고링크

https://stackoverflow.com/questions/42853636/put-cookie-on-a-webview-in-xamarin/42854428

 

* 참고지식 - Android 기준

mixedContentMode

혼합 컨텐츠 모드를 지정합니다. 즉, WebView를 사용하면 안전한 출처가 다른 출처의 콘텐츠를로드 할 수 있습니다.

never (기본값) : WebView는 보안 오리진이 안전하지 않은 오리진에서 컨텐츠를로드하도록 허용하지 않습니다.

always : WebView를 사용하면 보안 출처가 다른 출처에서 콘텐츠를로드 할 수 있습니다 (해당 출처가 안전하지 않은 경우에도).

compatibility : WebView는 혼합 컨텐츠와 관련하여 최신 웹 브라우저의 접근 방식과 호환되도록 시도합니다.

 

 

thirdPartyCookiesEnabled

WebView 에서 타사 쿠키를 활성화하는 부울 값입니다. Android Kitkat 이상 및 iOS에서 타사 쿠키가 기본적으로 활성화 된 경우에만 Android Lollipop 이상에서 사용됩니다.

기본값은 true 입니다.

 

 

 

728x90
반응형
728x90
반응형
/// <summary>
/// Random Color
/// </summary>
/// <returns></returns>
private Brush RandomBrush()
{
    Brush result = Brushes.Transparent;

    Random random = new Random();

    Type brushesType = typeof(Brushes);

    PropertyInfo[] properties = brushesType.GetProperties();

    int randomValue = random.Next(properties.Length);
    result = (Brush)properties[randomValue].GetValue(null, null);

    return result;
}

 

728x90
반응형
728x90
반응형
고프로 히어로8 액션캠 SPJB1 블랙 + 듀얼배터리 충전기 킷 탐사 황사마스크 KF80, 일반 대형, 개별포장, 20개입 곰곰 사과 배 혼합 선물세트 골드, 5.5kg, 1개 디붐 디투 블루투스 스피커, 단일상품, 포레스트그린 바디굿 3단밴드 손목보호대, 1개

폴더의 파일을 읽어서 내용중에 찾고자하는 내용이 있다면 목록에 표시되며 목록을 더블클릭하면

화면에 파일이 선택되어 표시됩니다.


개발언어 : C#

[사용방법 - 간단]

1. 내용을 찾을 폴더를 찾거나 경로를 입력합니다.

2. 검색할 내용을 입력 후 Enter 하거나 Search  버튼을 클릭합니다.

3. 처음에는 xml 파일 내용을 검색하기 위해서 만든프로그램 입니다.^^


목록을 더블클릭하면 아래 처럼 화면에 표시됩니다.


다운로드

https://kei-soft.bitbucket.io/XmlSearch.exe



728x90
반응형
728x90
반응형
고프로 히어로8 액션캠 SPJB1 블랙 + 듀얼배터리 충전기 킷 탐사 황사마스크 KF80, 일반 대형, 개별포장, 20개입 디붐 타임박스 스마트 LED 올인원 블루투스스피커, TIMEBOX, 심플블랙 디붐 디투 블루투스 스피커, 단일상품, 포레스트그린 바디굿 3단밴드 손목보호대, 1개

        // EUC-KR

        private string EuckrEncoding(string data)

        {

            System.Text.Encoding euckr = System.Text.Encoding.GetEncoding(51949);

            byte[] euckrBytes = euckr.GetBytes(data);


            string urlEncodingText = "";

            foreach (byte b in euckrBytes)

            {

                string addText = Convert.ToString(b, 16);

                urlEncodingText = urlEncodingText + "%" + addText;

            }

            return Convert.ToString(urlEncodingText);

        }


        // UTF-8

        private string Utf8Encoding(string data)

        {

            System.Text.Encoding utf8 = System.Text.Encoding.UTF8;

            byte[] utf8Bytes = utf8.GetBytes(data);


            string urlEncodingText = "";

            foreach (byte b in utf8Bytes)

            {

                string addText = Convert.ToString(b, 16);

                urlEncodingText = urlEncodingText + "%" + addText;

            }

            return Convert.ToString(urlEncodingText);

        }


728x90
반응형

+ Recent posts