[Smart Device Link] 화면 등을 만들어 보도록 하겠습니다.

15650 단어 SDLAndroid
이번에는 SDL 화면을 만져보고 싶어요.
비슷한 시점에 ASCII도 했다SDL 연재.
시뮬레이터 제작 등으로 상당히 상세하게 기재되어 있기 때문이다
이쪽에서도 볼 수 있으면 다양한 지식을 얻을 수 있을 것 같아요.

SDL 화면 정보


SDL 화면은 Android Auto 등과 다르게 표시됩니다.
기본적으로 템플릿을 사용한다고 가정한 것 같습니다.
미리 결정된 화면 구성(이미지, 버튼 등)에 대해 정보를 설정하고 동작을 설정합니다.
개발자의 경우 SDL 터미널 디자인에 신경 쓰지 않고 통일감 있는 디자인 기능을 제공할 수 있다.
※ 내 생각엔 말이 너무 좋은 것 같아.
자유롭게 화면을 만드는 방법(project 모드)도 있지만, 그건 다른 기회에 설명할 수 있습니다.
이번에는 Giithub:SDL의 샘플를 토대로 설명한다.

화면을 만들어 보도록 하겠습니다.


템플릿 설정
아무것도 설정하지 않으면, PredefinedLayout.MEDIA 상태가 설정되어 있습니다.
특정 템플릿을 사용하려면 SetDisplayLayout.setDisplayLayout로 템플릿을 지정하고 sdlManager.sendRPC로 등록하십시오.
SdlService.java
private void setDisplayGraphicWithTextButtons(){
    SetDisplayLayout setDisplayLayoutRequest = new SetDisplayLayout();

    //GRAPHIC_WITH_TEXT_AND_SOFTBUTTONSのテンプレートを設定
    setDisplayLayoutRequest.setDisplayLayout(PredefinedLayout.GRAPHIC_WITH_TEXTBUTTONS.toString());
    setDisplayLayoutRequest.setOnRPCResponseListener(new OnRPCResponseListener() {
        @Override
        public void onResponse(int correlationId, RPCResponse response) {
            //テンプレートの設定に成功した場合
            if(((SetDisplayLayoutResponse) response).getSuccess()){
                Log.i("SdlService", "Display layout set successfully.");
                //ここで画面の設定処理などを記載します。
            }else{
                Log.i("SdlService", "Display layout request rejected.");
            }
    });

    sdlManager.sendRPC(setDisplayLayoutRequest);
}
사용 가능한 템플릿은??
템플릿은 SDL 터미널에 종속되므로 템플릿을 사용하기 전에 사용 가능한지 확인해야 합니다.
사용 가능한 템플릿은 다음과 같은 방법으로 얻을 수 있습니다.
SdlService.java
private void checkTemplateType(){
    Object result = sdlManager.getSystemCapabilityManager().getCapability(SystemCapabilityType.DISPLAY);
    if( result instanceof DisplayCapabilities){
        List<String> templates = ((DisplayCapabilities) result).getTemplatesAvailable();
        Log.i("Templete", templates.toString());
    }
}
참고로 Manticore의 시뮬레이터에서 사용할 수 있는 모델은 다음과 같다.
※ 하지만 제대로 작동하지 않는 경우도 있습니다.
[DEFAULT, MEDIA, NON-MEDIA, ONSCREEN_PRESETS, NAV_FULLSCREEN_MAP, NAV_KEYBOARD, GRAPHIC_WITH_TEXT, TEXT_WITH_GRAPHIC, TILES_ONLY, TEXTBUTTONS_ONLY, GRAPHIC_WITH_TILES, TILES_WITH_GRAPHIC, GRAPHIC_WITH_TEXT_AND_SOFTBUTTONS, TEXT_AND_SOFTBUTTONS_WITH_GRAPHIC, GRAPHIC_WITH_TEXTBUTTONS, TEXTBUTTONS_WITH_GRAPHIC, LARGE_GRAPHIC_WITH_SOFTBUTTONS, DOUBLE_GRAPHIC_WITH_SOFTBUTTONS, LARGE_GRAPHIC_ONLY]
참조: DisplayCapabilities 클래스 설명
참조: 설계 정보
그림과 텍스트를 설정해 보십시오
이미지 및 텍스트 시작sdlManager.getScreenManager().beginTransactionsdlManager.getScreenManager().commit 사이에 설정합니다.
표시할 수 있는 문자, 이미지의 위치, 크기 등은 템플릿에 따라 달라지므로 지정할 수 없습니다.
FileType은 이미지를 지정할 때 이미지 유형에 맞는 이미지를 사용합니다.
또한 사용 가능한 이미지도 SDL 터미널에 따라 달라지므로 실제 사용 가능 여부는 템플릿과 마찬가지로 확인해야 합니다.
사용 가능한 이미지는 DisplayCapabilities.getGraphicSupported에서 확인할 수 있습니다.
SdlService.java

sdlManager.getScreenManager().beginTransaction();
//テキストを登録する場合
//sdlManager.getScreenManager().setTextField1("Hello, this is MainField1.");
//画像を登録する
SdlArtwork artwork = new SdlArtwork("sample01.png", FileType.GRAPHIC_PNG, R.drawable.sample01, true);
sdlManager.getScreenManager().setPrimaryGraphic(artwork);
sdlManager.getScreenManager().commit(new CompletionListener() {
    @Override
    public void onComplete(boolean success) {
        if (success) {
            Log.i(TAG, "welcome show successful");
        }
    }
});
설정 버튼
버튼은 getScreenManager().setSoftButtonObjects을 사용하여 SoftButonObject를 설정할 수 있습니다.
템플릿에 따라 여러 버튼을 등록할 수 있습니다.
SoftButonObject는 여러 개의 설정을 통해 SoftButonState를 유지합니다.
각도 버튼처럼 디스플레이를 전환하여 사용할 수 있습니다.
버튼은 SoftButtonObject.transitionToNextState에서 전환할 수 있습니다.
SdlService.java
//一つ目のボタンの設定
//一つ目のボタンステート
SoftButtonState softButton01State1 = new SoftButtonState("button01_state1", "button01_state1", null);

//Artworkを設定する事でボタンに画像を貼り付けることも可能
SdlArtwork state_artwork = new SdlArtwork("state2.png", FileType.GRAPHIC_PNG, R.drawable.ic_sdl, true);
SoftButtonState softButton01State2 = new SoftButtonState("button01_state2", "button01_state2", state_artwork);

List<SoftButtonState> softButtonStates = Arrays.asList(softButton01State1, softButton01State2);
SoftButtonObject softButtonObject1 = new SoftButtonObject("softButtonObject01", softButtonStates, softButton01State1.getName(), null);

//二つ目のボタン設定
SoftButtonState softButton02State1 = new SoftButtonState("button02_state1", "button02_state1", null);
SoftButtonObject softButtonObject2 = new SoftButtonObject("softButtonObject02",  Collections.singletonList(softButton02State1), softButton02State1.getName(), null);

//二つのボタンを登録する
List<SoftButtonObject> buttons = Arrays.asList(softButtonObject1, softButtonObject2);
sdlManager.getScreenManager().setSoftButtonObjects(buttons);
버튼 이벤트는 SoftButon Object가 생성되거나 setOnEventListener에 등록할 수 있습니다.
버튼을 누르면 onProess가 호출됩니다.
onEvent는 각 작업에 대해 체크OnButtonEvent.getButtonEventMode를 통해 호출됨
판단 가능BUTTONUP 또는BUTTONDOWN.
SdlService.java
softButtonObject1.setOnEventListener(new SoftButtonObject.OnEventListener() {
    @Override
    public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPress) {
        softButtonObject.transitionToNextState();
    }

    @Override
    public void onEvent(SoftButtonObject softButtonObject, OnButtonEvent onButtonEvent) {
    }
});
이번 샘플을 실제로 조작하면 이런 느낌이 들 거예요.
button01_state1을 시작한 후 단추를 누르면 전환됩니다.
button02_state1을 이동할 때 왼쪽 그림을 전환합니다.

참조: 텍스트, 이미지 및 버튼 정보

최후


화면의 제작 방법을 대략적으로 설명하였다.
열심히 작업할 때 SDL 의존 검사(템플릿, 이미지 포맷 등 다양한···)를 많이 넣어서 좀 번거로운 느낌이 든다.
다만, 간단한 시연용 앱을 만들면 이번 내용을 알면 많이 할 수 있을 것 같다.SdlManagerListener 등에서도 기본 부분을 건너뛴 부분이 있어요.
다음에 나는 자동차에서 정보를 얻으려고 한다.

좋은 웹페이지 즐겨찾기