@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<bytecodeTargetLevel target="11" />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,414 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DBNavigator.Project.DataEditorManager">
|
||||||
|
<record-view-column-sorting-type value="BY_INDEX" />
|
||||||
|
<value-preview-text-wrapping value="true" />
|
||||||
|
<value-preview-pinned value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseEditorStateManager">
|
||||||
|
<last-used-providers />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseFileManager">
|
||||||
|
<open-files />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.Settings">
|
||||||
|
<connections />
|
||||||
|
<browser-settings>
|
||||||
|
<general>
|
||||||
|
<display-mode value="TABBED" />
|
||||||
|
<navigation-history-size value="100" />
|
||||||
|
<show-object-details value="false" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<object-type-filter>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="true" />
|
||||||
|
<object-type name="ROLE" enabled="true" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="true" />
|
||||||
|
<object-type name="CHARSET" enabled="true" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED_VIEW" enabled="true" />
|
||||||
|
<object-type name="NESTED_TABLE" enabled="true" />
|
||||||
|
<object-type name="COLUMN" enabled="true" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="true" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
|
||||||
|
<object-type name="ARGUMENT" enabled="true" />
|
||||||
|
<object-type name="DIMENSION" enabled="true" />
|
||||||
|
<object-type name="CLUSTER" enabled="true" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</object-type-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting>
|
||||||
|
<object-type name="COLUMN" sorting-type="NAME" />
|
||||||
|
<object-type name="FUNCTION" sorting-type="NAME" />
|
||||||
|
<object-type name="PROCEDURE" sorting-type="NAME" />
|
||||||
|
<object-type name="ARGUMENT" sorting-type="POSITION" />
|
||||||
|
<object-type name="TYPE ATTRIBUTE" sorting-type="POSITION" />
|
||||||
|
</sorting>
|
||||||
|
<default-editors>
|
||||||
|
<object-type name="VIEW" editor-type="SELECTION" />
|
||||||
|
<object-type name="PACKAGE" editor-type="SELECTION" />
|
||||||
|
<object-type name="TYPE" editor-type="SELECTION" />
|
||||||
|
</default-editors>
|
||||||
|
</browser-settings>
|
||||||
|
<navigation-settings>
|
||||||
|
<lookup-filters>
|
||||||
|
<lookup-objects>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="false" />
|
||||||
|
<object-type name="ROLE" enabled="false" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="false" />
|
||||||
|
<object-type name="CHARSET" enabled="false" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED VIEW" enabled="true" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="false" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="DIMENSION" enabled="false" />
|
||||||
|
<object-type name="CLUSTER" enabled="false" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</lookup-objects>
|
||||||
|
<force-database-load value="false" />
|
||||||
|
<prompt-connection-selection value="true" />
|
||||||
|
<prompt-schema-selection value="true" />
|
||||||
|
</lookup-filters>
|
||||||
|
</navigation-settings>
|
||||||
|
<dataset-grid-settings>
|
||||||
|
<general>
|
||||||
|
<enable-zooming value="true" />
|
||||||
|
<enable-column-tooltip value="true" />
|
||||||
|
</general>
|
||||||
|
<sorting>
|
||||||
|
<nulls-first value="true" />
|
||||||
|
<max-sorting-columns value="4" />
|
||||||
|
</sorting>
|
||||||
|
<audit-columns>
|
||||||
|
<column-names value="" />
|
||||||
|
<visible value="true" />
|
||||||
|
<editable value="false" />
|
||||||
|
</audit-columns>
|
||||||
|
</dataset-grid-settings>
|
||||||
|
<dataset-editor-settings>
|
||||||
|
<text-editor-popup>
|
||||||
|
<active value="false" />
|
||||||
|
<active-if-empty value="false" />
|
||||||
|
<data-length-threshold value="100" />
|
||||||
|
<popup-delay value="1000" />
|
||||||
|
</text-editor-popup>
|
||||||
|
<values-actions-popup>
|
||||||
|
<show-popup-button value="true" />
|
||||||
|
<element-count-threshold value="1000" />
|
||||||
|
<data-length-threshold value="250" />
|
||||||
|
</values-actions-popup>
|
||||||
|
<general>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<fetch-timeout value="30" />
|
||||||
|
<trim-whitespaces value="true" />
|
||||||
|
<convert-empty-strings-to-null value="true" />
|
||||||
|
<select-content-on-cell-edit value="true" />
|
||||||
|
<large-value-preview-active value="true" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<prompt-filter-dialog value="true" />
|
||||||
|
<default-filter-type value="BASIC" />
|
||||||
|
</filters>
|
||||||
|
<qualified-text-editor text-length-threshold="300">
|
||||||
|
<content-types>
|
||||||
|
<content-type name="Text" enabled="true" />
|
||||||
|
<content-type name="Properties" enabled="true" />
|
||||||
|
<content-type name="XML" enabled="true" />
|
||||||
|
<content-type name="DTD" enabled="true" />
|
||||||
|
<content-type name="HTML" enabled="true" />
|
||||||
|
<content-type name="XHTML" enabled="true" />
|
||||||
|
<content-type name="Java" enabled="true" />
|
||||||
|
<content-type name="SQL" enabled="true" />
|
||||||
|
<content-type name="PL/SQL" enabled="true" />
|
||||||
|
<content-type name="JSON" enabled="true" />
|
||||||
|
<content-type name="JSON5" enabled="true" />
|
||||||
|
<content-type name="Groovy" enabled="true" />
|
||||||
|
<content-type name="AIDL" enabled="true" />
|
||||||
|
<content-type name="YAML" enabled="true" />
|
||||||
|
<content-type name="Manifest" enabled="true" />
|
||||||
|
</content-types>
|
||||||
|
</qualified-text-editor>
|
||||||
|
<record-navigation>
|
||||||
|
<navigation-target value="VIEWER" />
|
||||||
|
</record-navigation>
|
||||||
|
</dataset-editor-settings>
|
||||||
|
<code-editor-settings>
|
||||||
|
<general>
|
||||||
|
<show-object-navigation-gutter value="false" />
|
||||||
|
<show-spec-declaration-navigation-gutter value="true" />
|
||||||
|
<enable-spellchecking value="true" />
|
||||||
|
<enable-reference-spellchecking value="false" />
|
||||||
|
</general>
|
||||||
|
<confirmations>
|
||||||
|
<save-changes value="false" />
|
||||||
|
<revert-changes value="true" />
|
||||||
|
</confirmations>
|
||||||
|
</code-editor-settings>
|
||||||
|
<code-completion-settings>
|
||||||
|
<filters>
|
||||||
|
<basic-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="false" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</basic-filter>
|
||||||
|
<extended-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</extended-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting enabled="true">
|
||||||
|
<sorting-element type="RESERVED_WORD" id="keyword" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="datatype" />
|
||||||
|
<sorting-element type="OBJECT" id="column" />
|
||||||
|
<sorting-element type="OBJECT" id="table" />
|
||||||
|
<sorting-element type="OBJECT" id="view" />
|
||||||
|
<sorting-element type="OBJECT" id="materialized view" />
|
||||||
|
<sorting-element type="OBJECT" id="index" />
|
||||||
|
<sorting-element type="OBJECT" id="constraint" />
|
||||||
|
<sorting-element type="OBJECT" id="trigger" />
|
||||||
|
<sorting-element type="OBJECT" id="synonym" />
|
||||||
|
<sorting-element type="OBJECT" id="sequence" />
|
||||||
|
<sorting-element type="OBJECT" id="procedure" />
|
||||||
|
<sorting-element type="OBJECT" id="function" />
|
||||||
|
<sorting-element type="OBJECT" id="package" />
|
||||||
|
<sorting-element type="OBJECT" id="type" />
|
||||||
|
<sorting-element type="OBJECT" id="dimension" />
|
||||||
|
<sorting-element type="OBJECT" id="cluster" />
|
||||||
|
<sorting-element type="OBJECT" id="dblink" />
|
||||||
|
<sorting-element type="OBJECT" id="schema" />
|
||||||
|
<sorting-element type="OBJECT" id="role" />
|
||||||
|
<sorting-element type="OBJECT" id="user" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="function" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="parameter" />
|
||||||
|
</sorting>
|
||||||
|
<format>
|
||||||
|
<enforce-code-style-case value="true" />
|
||||||
|
</format>
|
||||||
|
</code-completion-settings>
|
||||||
|
<execution-engine-settings>
|
||||||
|
<statement-execution>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<execution-timeout value="20" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<focus-result value="false" />
|
||||||
|
<prompt-execution value="false" />
|
||||||
|
</statement-execution>
|
||||||
|
<script-execution>
|
||||||
|
<command-line-interfaces />
|
||||||
|
<execution-timeout value="300" />
|
||||||
|
</script-execution>
|
||||||
|
<method-execution>
|
||||||
|
<execution-timeout value="30" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<parameter-history-size value="10" />
|
||||||
|
</method-execution>
|
||||||
|
</execution-engine-settings>
|
||||||
|
<operation-settings>
|
||||||
|
<transactions>
|
||||||
|
<uncommitted-changes>
|
||||||
|
<on-project-close value="ASK" />
|
||||||
|
<on-disconnect value="ASK" />
|
||||||
|
<on-autocommit-toggle value="ASK" />
|
||||||
|
</uncommitted-changes>
|
||||||
|
<multiple-uncommitted-changes>
|
||||||
|
<on-commit value="ASK" />
|
||||||
|
<on-rollback value="ASK" />
|
||||||
|
</multiple-uncommitted-changes>
|
||||||
|
</transactions>
|
||||||
|
<session-browser>
|
||||||
|
<disconnect-session value="ASK" />
|
||||||
|
<kill-session value="ASK" />
|
||||||
|
<reload-on-filter-change value="false" />
|
||||||
|
</session-browser>
|
||||||
|
<compiler>
|
||||||
|
<compile-type value="KEEP" />
|
||||||
|
<compile-dependencies value="ASK" />
|
||||||
|
<always-show-controls value="false" />
|
||||||
|
</compiler>
|
||||||
|
<debugger>
|
||||||
|
<debugger-type value="ASK" />
|
||||||
|
<use-generic-runners value="true" />
|
||||||
|
</debugger>
|
||||||
|
</operation-settings>
|
||||||
|
<ddl-file-settings>
|
||||||
|
<extensions>
|
||||||
|
<mapping file-type-id="VIEW" extensions="vw" />
|
||||||
|
<mapping file-type-id="TRIGGER" extensions="trg" />
|
||||||
|
<mapping file-type-id="PROCEDURE" extensions="prc" />
|
||||||
|
<mapping file-type-id="FUNCTION" extensions="fnc" />
|
||||||
|
<mapping file-type-id="PACKAGE" extensions="pkg" />
|
||||||
|
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
|
||||||
|
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
|
||||||
|
<mapping file-type-id="TYPE" extensions="tpe" />
|
||||||
|
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
|
||||||
|
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
|
||||||
|
</extensions>
|
||||||
|
<general>
|
||||||
|
<lookup-ddl-files value="true" />
|
||||||
|
<create-ddl-files value="false" />
|
||||||
|
<synchronize-ddl-files value="true" />
|
||||||
|
<use-qualified-names value="false" />
|
||||||
|
<make-scripts-rerunnable value="true" />
|
||||||
|
</general>
|
||||||
|
</ddl-file-settings>
|
||||||
|
<general-settings>
|
||||||
|
<regional-settings>
|
||||||
|
<date-format value="MEDIUM" />
|
||||||
|
<number-format value="UNGROUPED" />
|
||||||
|
<locale value="SYSTEM_DEFAULT" />
|
||||||
|
<use-custom-formats value="false" />
|
||||||
|
</regional-settings>
|
||||||
|
<environment>
|
||||||
|
<environment-types>
|
||||||
|
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
|
||||||
|
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
|
||||||
|
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
|
||||||
|
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
|
||||||
|
</environment-types>
|
||||||
|
<visibility-settings>
|
||||||
|
<connection-tabs value="true" />
|
||||||
|
<dialog-headers value="true" />
|
||||||
|
<object-editor-tabs value="true" />
|
||||||
|
<script-editor-tabs value="false" />
|
||||||
|
<execution-result-tabs value="true" />
|
||||||
|
</visibility-settings>
|
||||||
|
</environment>
|
||||||
|
</general-settings>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
|
<component name="GradleSettings">
|
||||||
|
<option name="linkedExternalProjectsSettings">
|
||||||
|
<GradleProjectSettings>
|
||||||
|
<option name="testRunner" value="GRADLE" />
|
||||||
|
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
|
<option name="modules">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/app" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</GradleProjectSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RemoteRepositoriesConfiguration">
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Maven Central repository" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="jboss.community" />
|
||||||
|
<option name="name" value="JBoss Community repository" />
|
||||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="maven" />
|
||||||
|
<option name="name" value="maven" />
|
||||||
|
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="maven2" />
|
||||||
|
<option name="name" value="maven2" />
|
||||||
|
<option name="url" value="http://maven.aliyun.com/nexus/content/repositories/jcenter" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="Google" />
|
||||||
|
<option name="name" value="Google" />
|
||||||
|
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
|
||||||
|
</remote-repository>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectType">
|
||||||
|
<option name="id" value="Android" />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit aec645b6d670e75be67c525ebe11c562f66ff1f7
|
@ -0,0 +1,29 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
title __NOVELREADER's Component Diagram__\n
|
||||||
|
|
||||||
|
component "NovelReader.app.unitTest" {
|
||||||
|
[NovelReader.app.main]
|
||||||
|
component "NovelReader.app.main" {
|
||||||
|
[NovelReader.app.androidTest]
|
||||||
|
component "NovelReader.app.androidTest" {
|
||||||
|
[NovelReader.app]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
right footer
|
||||||
|
|
||||||
|
|
||||||
|
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
|
||||||
|
For more information about this tool, please contact philippe.mesmeur@gmail.com
|
||||||
|
endfooter
|
||||||
|
|
||||||
|
@enduml
|
@ -0,0 +1,41 @@
|
|||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion 28
|
||||||
|
defaultConfig {
|
||||||
|
applicationId "fte.finalproject"
|
||||||
|
minSdkVersion 22
|
||||||
|
targetSdkVersion 28
|
||||||
|
versionCode 1
|
||||||
|
versionName "1.0"
|
||||||
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
|
}
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
|
implementation 'com.android.support:appcompat-v7:28.0.0'
|
||||||
|
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||||
|
implementation 'com.android.support:cardview-v7:28.0.0'
|
||||||
|
implementation 'com.android.support:recyclerview-v7:28.0.0'
|
||||||
|
implementation 'de.hdodenhof:circleimageview:2.2.0'
|
||||||
|
implementation 'com.android.support:cardview-v7:28.0.0'
|
||||||
|
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
|
||||||
|
implementation 'com.squareup.retrofit2:converter-scalars:2.0.0'
|
||||||
|
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
|
||||||
|
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
|
||||||
|
implementation 'io.reactivex:rxandroid:1.2.1'
|
||||||
|
implementation 'io.reactivex:rxjava:1.2.1'
|
||||||
|
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
|
||||||
|
testImplementation 'junit:junit:4.12'
|
||||||
|
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||||
|
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
||||||
|
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
|
||||||
|
implementation 'io.reactivex.rxjava2:rxjava:2.1.0'
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
# Add project specific ProGuard rules here.
|
||||||
|
# You can control the set of applied configuration files using the
|
||||||
|
# proguardFiles setting in build.gradle.
|
||||||
|
#
|
||||||
|
# For more details, see
|
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following
|
||||||
|
# and specify the fully qualified class name to the JavaScript interface
|
||||||
|
# class:
|
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||||
|
# public *;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Uncomment this to preserve the line number information for
|
||||||
|
# debugging stack traces.
|
||||||
|
#-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
|
# If you keep the line number information, uncomment this to
|
||||||
|
# hide the original source file name.
|
||||||
|
#-renamesourcefileattribute SourceFile
|
@ -0,0 +1 @@
|
|||||||
|
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.example;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.support.test.InstrumentationRegistry;
|
||||||
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instrumented test, which will execute on an Android device.
|
||||||
|
*
|
||||||
|
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||||
|
*/
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class ExampleInstrumentedTest {
|
||||||
|
@Test
|
||||||
|
public void useAppContext() {
|
||||||
|
// Context of the app under test.
|
||||||
|
Context appContext = InstrumentationRegistry.getTargetContext();
|
||||||
|
|
||||||
|
assertEquals("fte.finalproject", appContext.getPackageName());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.example">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:allowBackup="true"
|
||||||
|
android:icon="@mipmap/icon"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:supportsRtl="true"
|
||||||
|
android:theme="@style/AppTheme">
|
||||||
|
<activity android:name="com.example.Activity.MainActivity">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity android:name="com.example.Activity.ReadPageActivity"
|
||||||
|
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||||
|
android:screenOrientation="portrait"/>
|
||||||
|
<activity android:name="com.example.Activity.BookDetailActivity">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
-->
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="com.example.Activity.SearchActivity"
|
||||||
|
android:windowSoftInputMode="adjustPan|stateHidden">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
-->
|
||||||
|
|
||||||
|
</activity>
|
||||||
|
<activity android:name="com.example.Activity.CategoryActivity" />
|
||||||
|
<activity android:name="com.example.Activity.RecomActivity"></activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
@ -0,0 +1,409 @@
|
|||||||
|
package com.example.Activity;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Matrix;
|
||||||
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.RadioButton;
|
||||||
|
import android.widget.RadioGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.example.DataBase.DatabaseControl;
|
||||||
|
import com.example.Object.BookObj;
|
||||||
|
import com.example.Object.CategoryObj;
|
||||||
|
import com.example.Object.ChapterLinkObj;
|
||||||
|
import com.example.Object.RecomListObj;
|
||||||
|
import com.example.Object.ShelfBookObj;
|
||||||
|
import com.example.R;
|
||||||
|
import com.example.Service.BookService;
|
||||||
|
|
||||||
|
public class BookDetailActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
RadioButton addButton;
|
||||||
|
RadioButton readButton;
|
||||||
|
// RadioButton downloadButton;
|
||||||
|
Button moreButton;
|
||||||
|
Button recom1;
|
||||||
|
Button recom2;
|
||||||
|
Button recom3;
|
||||||
|
|
||||||
|
ImageView back;
|
||||||
|
TextView pageTitle;
|
||||||
|
ImageView bookCover;
|
||||||
|
TextView bookTitle;
|
||||||
|
TextView bookInfo;
|
||||||
|
TextView updateTime;
|
||||||
|
TextView follower;
|
||||||
|
TextView retentionRatio;
|
||||||
|
TextView bookIntro;
|
||||||
|
RadioGroup recomRG;
|
||||||
|
|
||||||
|
// 书籍对象
|
||||||
|
private BookObj bookObj;
|
||||||
|
|
||||||
|
// 同类书籍
|
||||||
|
private CategoryObj categoryObj;
|
||||||
|
|
||||||
|
private List<BookObj> bookObjs = new ArrayList<>();
|
||||||
|
|
||||||
|
private Bitmap cover;
|
||||||
|
|
||||||
|
private List<ChapterLinkObj> linkList;
|
||||||
|
|
||||||
|
private StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
|
||||||
|
Handler mHandler = new Handler();
|
||||||
|
|
||||||
|
private SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-mm'T'HH:MM:SS");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_book_detail);
|
||||||
|
|
||||||
|
// 获取控件
|
||||||
|
back = findViewById(R.id.detail_back);
|
||||||
|
pageTitle = findViewById(R.id.detail_title);
|
||||||
|
addButton = findViewById(R.id.detail_bottom_add);
|
||||||
|
readButton = findViewById(R.id.detail_bottom_read);
|
||||||
|
// downloadButton = findViewById(R.id.detail_bottom_download);
|
||||||
|
moreButton = findViewById(R.id.detail_more);
|
||||||
|
bookCover = findViewById(R.id.detail_cover);
|
||||||
|
bookTitle = findViewById(R.id.detail_bookTitle);
|
||||||
|
bookInfo = findViewById(R.id.detail_TV);
|
||||||
|
updateTime = findViewById(R.id.detail_update);
|
||||||
|
follower = findViewById(R.id.detail_follower2);
|
||||||
|
retentionRatio = findViewById(R.id.detail_retentionRatio2);
|
||||||
|
bookIntro = findViewById(R.id.detail_longIntro);
|
||||||
|
recomRG = findViewById(R.id.detail_recomRG);
|
||||||
|
recom1 = findViewById(R.id.detail_recom1);
|
||||||
|
recom2 = findViewById(R.id.detail_recom2);
|
||||||
|
recom3 = findViewById(R.id.detail_recom3);
|
||||||
|
|
||||||
|
Intent intent = getIntent();
|
||||||
|
final Bundle bundle = intent.getExtras();
|
||||||
|
bookObj = (BookObj) bundle.getSerializable("bookobj");
|
||||||
|
|
||||||
|
// 获取封面图片
|
||||||
|
final String iconURL = BookService.StaticsUrl + bookObj.getCover();
|
||||||
|
final Matrix largeMatrix = new Matrix();
|
||||||
|
final Matrix littleMatrix = new Matrix();
|
||||||
|
largeMatrix.postScale((float) 2, (float) 2);
|
||||||
|
littleMatrix.postScale((float) 0.4, (float) 0.4);
|
||||||
|
|
||||||
|
if (!isNetWorkConnected(BookDetailActivity.this)) {
|
||||||
|
Toast.makeText(BookDetailActivity.this, "未连接网络", Toast.LENGTH_SHORT).show();
|
||||||
|
} else {
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
URL url = new URL(iconURL);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setConnectTimeout(10000);
|
||||||
|
if (connection.getResponseCode() == 200) {
|
||||||
|
InputStream inputStream = connection.getInputStream();
|
||||||
|
cover = BitmapFactory.decodeStream(inputStream);
|
||||||
|
if (cover != null) {
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Log.d("width", String.valueOf(cover.getWidth()));
|
||||||
|
Log.d("height", String.valueOf(cover.getHeight()));
|
||||||
|
littleMatrix.postScale((float) 0.5, (float) 0.5);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
URL url = new URL(iconURL);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setConnectTimeout(10000);
|
||||||
|
if (connection.getResponseCode() == 200) {
|
||||||
|
InputStream inputStream = connection.getInputStream();
|
||||||
|
cover = BitmapFactory.decodeStream(inputStream);
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Log.d("width", String.valueOf(cover.getWidth()));
|
||||||
|
Log.d("height", String.valueOf(cover.getHeight()));
|
||||||
|
/*if (cover.getWidth() <= 150 && cover.getHeight() <= 200) {
|
||||||
|
bookCover.setImageBitmap(Bitmap.createBitmap(cover, 0, 0, cover.getWidth(), cover.getHeight(), largeMatrix, true));
|
||||||
|
} else if (cover.getWidth() > 300 && cover.getHeight() > 400) {
|
||||||
|
bookCover.setImageBitmap(Bitmap.createBitmap(cover, 0, 0, cover.getWidth(), cover.getHeight(), littleMatrix, true));
|
||||||
|
} else {
|
||||||
|
bookCover.setImageBitmap(cover);
|
||||||
|
}*/
|
||||||
|
bookCover.setImageBitmap(cover);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
bookCover.setImageBitmap(cover);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
|
||||||
|
if (!isNetWorkConnected(BookDetailActivity.this)) {
|
||||||
|
Toast.makeText(BookDetailActivity.this, "未连接网络", Toast.LENGTH_SHORT).show();
|
||||||
|
} else {
|
||||||
|
// 获取书籍相关信息
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
bookObj = BookService.getBookService().getBookById(bookObj.getId());
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
bookTitle.setText(bookObj.getTitle());
|
||||||
|
pageTitle.setText(bookObj.getTitle());
|
||||||
|
int wordNum = bookObj.getWordCount() / 10000;
|
||||||
|
bookInfo.setText(bookObj.getAuthor() + " | " + bookObj.getMinorCate() + " | " + String.valueOf(wordNum) + "万字");
|
||||||
|
String updateStr = "";
|
||||||
|
try {
|
||||||
|
Date date = format.parse(bookObj.getUpdated());
|
||||||
|
Date now = new Date(System.currentTimeMillis());
|
||||||
|
long period = now.getTime() - date.getTime();
|
||||||
|
Log.d("period", String.valueOf(period));
|
||||||
|
if (period / 86400000 < 1) {
|
||||||
|
updateStr = "上次更新: 今天";
|
||||||
|
} else if (period / 86400000 > 1) {
|
||||||
|
updateStr = "上次更新: " + String.valueOf(period / 86400000) + "天前";
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
updateTime.setText(updateStr);
|
||||||
|
// int followerNum = bookObj.getLatelyFollower() / 10000;
|
||||||
|
follower.setText(String.valueOf(bookObj.getLatelyFollower()) + "人");
|
||||||
|
retentionRatio.setText(bookObj.getRetentionRatio() + "%");
|
||||||
|
String intro = bookObj.getLongIntro();
|
||||||
|
if (intro.length() > 80) intro = intro.substring(0, 80);
|
||||||
|
intro += "...";
|
||||||
|
bookIntro.setText(intro);
|
||||||
|
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
categoryObj = BookService.getBookService().getBooksByCategoty("reputation", bookObj.getMajorCate(), 0, 10, bookObj.getGender()[0]);
|
||||||
|
Log.d("size", String.valueOf(categoryObj.getBooks().size()));
|
||||||
|
for (int i = 0; i < categoryObj.getBooks().size(); i++) {
|
||||||
|
final int j = i;
|
||||||
|
final BookObj temp = BookService.getBookService().getBookById(categoryObj.getBooks().get(j).getId());
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
bookObjs.add(temp);
|
||||||
|
if (j < 3) {
|
||||||
|
final String iconURL = BookService.StaticsUrl + temp.getCover();
|
||||||
|
final Button button = (Button) recomRG.getChildAt(j);
|
||||||
|
button.setText(bookObjs.get(j).getTitle());
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
URL url = new URL(iconURL);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setConnectTimeout(10000);
|
||||||
|
if (connection.getResponseCode() == 200) {
|
||||||
|
InputStream inputStream = connection.getInputStream();
|
||||||
|
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Drawable drawable = null;
|
||||||
|
drawable = new BitmapDrawable(Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), littleMatrix, true));
|
||||||
|
drawable.setBounds(0, 0, 270, 360);
|
||||||
|
button.setCompoundDrawables(null, drawable, null, null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
recom1.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(BookDetailActivity.this, BookDetailActivity.class);
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putSerializable("bookobj", bookObjs.get(0));
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
recom2.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(BookDetailActivity.this, BookDetailActivity.class);
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putSerializable("bookobj", bookObjs.get(1));
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
recom3.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(BookDetailActivity.this, BookDetailActivity.class);
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putSerializable("bookobj", bookObjs.get(2));
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 返回
|
||||||
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (DatabaseControl.getInstance(BookDetailActivity.this).judgeBookExist(bookObj.getId())) {
|
||||||
|
// 已存在
|
||||||
|
setButtonToDelete();
|
||||||
|
} else {
|
||||||
|
// 不存在
|
||||||
|
setButtonToAdd();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 阅读
|
||||||
|
readButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(BookDetailActivity.this, ReadPageActivity.class);
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString("bookid", bookObj.getId());
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 下载
|
||||||
|
/*downloadButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
*//*new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (int i = 0; i < linkList.size(); i++) {
|
||||||
|
ChapterObj chapterObj = BookService.getBookService().getChapterByLink(linkList.get(i).getLink());
|
||||||
|
stringBuilder.append(chapterObj.getIchapter().getTitle());
|
||||||
|
stringBuilder.append("\n");
|
||||||
|
stringBuilder.append(chapterObj.getIchapter().getBody());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}).start();*//*
|
||||||
|
Toast.makeText(BookDetailActivity.this, "功能开发中,敬请期待", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});*/
|
||||||
|
|
||||||
|
// 查看更多同类书籍
|
||||||
|
moreButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(BookDetailActivity.this, RecomActivity.class);
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
RecomListObj recomListObj = new RecomListObj(bookObjs);
|
||||||
|
bundle.putSerializable("list", recomListObj);
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setButtonToAdd() {
|
||||||
|
addButton.setText("加入书架");
|
||||||
|
addButton.setTextColor(getResources().getColor(R.color.colorRed));
|
||||||
|
addButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
DatabaseControl.getInstance(BookDetailActivity.this).addShelfBook(new ShelfBookObj(bookObj.getId(), bookObj.getTitle(), cover, bookObj.getCover(),0, "online", 0, bookObj.getLongIntro(), bookObj.getAuthor(), bookObj.getMajorCate()));
|
||||||
|
Toast.makeText(BookDetailActivity.this, "已添加《" + bookObj.getTitle() + "》", Toast.LENGTH_SHORT).show();
|
||||||
|
setButtonToDelete();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setButtonToDelete() {
|
||||||
|
addButton.setText("移除书架");
|
||||||
|
addButton.setTextColor(getResources().getColor(R.color.colorGrey));
|
||||||
|
addButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
DatabaseControl.getInstance(BookDetailActivity.this).deleteShelfBook(bookObj.getId());
|
||||||
|
Toast.makeText(BookDetailActivity.this, "已移除《" + bookObj.getTitle() + "》", Toast.LENGTH_SHORT).show();
|
||||||
|
setButtonToAdd();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 辅助函数:判断网络是否连接
|
||||||
|
private boolean isNetWorkConnected(Context context) {
|
||||||
|
if (context != null) {
|
||||||
|
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
|
||||||
|
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
|
||||||
|
if (mNetworkInfo != null) {
|
||||||
|
return mNetworkInfo.isConnected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,120 @@
|
|||||||
|
package com.example.Activity;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.example.R;
|
||||||
|
import com.example.RecyclerView.MyRecyclerViewAdapter;
|
||||||
|
import com.example.RecyclerView.MyViewHolder;
|
||||||
|
import com.example.Object.BookObj;
|
||||||
|
import com.example.Object.RecomListObj;
|
||||||
|
import com.example.Service.BookService;
|
||||||
|
|
||||||
|
public class RecomActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private List<BookObj> bookObjs;
|
||||||
|
|
||||||
|
private RecyclerView recyclerView;
|
||||||
|
|
||||||
|
private ImageView back;
|
||||||
|
|
||||||
|
private Handler mHandler = new Handler();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_recom);
|
||||||
|
|
||||||
|
// 获取同类书籍
|
||||||
|
Bundle bundle = getIntent().getExtras();
|
||||||
|
bookObjs = ((RecomListObj)bundle.getSerializable("list")).getBookObjs();
|
||||||
|
|
||||||
|
// 获取相关控件
|
||||||
|
back = findViewById(R.id.recom_back);
|
||||||
|
recyclerView = findViewById(R.id.recom_recyclerview);
|
||||||
|
|
||||||
|
// 内容填充
|
||||||
|
MyRecyclerViewAdapter<BookObj> adapter = new MyRecyclerViewAdapter<BookObj>(RecomActivity.this, R.layout.item_book, bookObjs) {
|
||||||
|
@Override
|
||||||
|
public void convert(MyViewHolder holder, BookObj bookObj) {
|
||||||
|
final ImageView imageView = holder.getView(R.id.item_book_cover);
|
||||||
|
TextView bookName = holder.getView(R.id.item_book_name);
|
||||||
|
TextView bookAuthor = holder.getView(R.id.item_book_author);
|
||||||
|
TextView bookType = holder.getView(R.id.item_book_type);
|
||||||
|
TextView bookIntro = holder.getView(R.id.item_book_intro);
|
||||||
|
bookName.setText(bookObj.getTitle());
|
||||||
|
bookType.setText(bookObj.getMajorCate());
|
||||||
|
bookAuthor.setText(bookObj.getAuthor());
|
||||||
|
String intro = bookObj.getLongIntro();
|
||||||
|
if (intro.length() > 50) intro = intro.substring(0, 50);
|
||||||
|
intro += "...";
|
||||||
|
bookIntro.setText(intro);
|
||||||
|
|
||||||
|
//通过网络获取书籍图标
|
||||||
|
final String iconURL = BookService.StaticsUrl + bookObj.getCover();
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
URL url = new URL(iconURL);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setConnectTimeout(10000);
|
||||||
|
if (connection.getResponseCode() == 200) {
|
||||||
|
InputStream inputStream = connection.getInputStream();
|
||||||
|
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
imageView.setImageBitmap(bitmap);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
adapter.setOnItemClickListener(new MyRecyclerViewAdapter.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(int position) {
|
||||||
|
//跳转到书籍详情界面
|
||||||
|
Intent intent = new Intent(RecomActivity.this, BookDetailActivity.class);
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putSerializable("bookobj", bookObjs.get(position));
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLongClick(int position) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
recyclerView.setAdapter(adapter);
|
||||||
|
recyclerView.setLayoutManager(new LinearLayoutManager(RecomActivity.this));
|
||||||
|
|
||||||
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,507 @@
|
|||||||
|
package com.example.Activity;
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.support.constraint.ConstraintLayout;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.support.v7.widget.SearchView;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import com.example.R;
|
||||||
|
import com.example.RecyclerView.MyRecyclerViewAdapter;
|
||||||
|
import com.example.RecyclerView.MyViewHolder;
|
||||||
|
import com.example.Object.BookObj;
|
||||||
|
import com.example.Object.SearchResultObj;
|
||||||
|
import com.example.Service.BookService;
|
||||||
|
|
||||||
|
import static com.example.DataBase.DatabaseControl.getInstance;
|
||||||
|
import static com.example.Service.BookService.getBookService;
|
||||||
|
|
||||||
|
public class SearchActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private SearchView searchView;
|
||||||
|
private TextView cancelView;
|
||||||
|
private TextView text1;
|
||||||
|
private TextView text2;
|
||||||
|
private TextView text3;
|
||||||
|
private TextView text4;
|
||||||
|
private TextView text5;
|
||||||
|
private TextView text6;
|
||||||
|
private ImageView deleteView;
|
||||||
|
private ImageView freshView;
|
||||||
|
private ListView historyList;
|
||||||
|
private ListView fuzzyList;
|
||||||
|
private ConstraintLayout initialLayout;
|
||||||
|
private LinearLayout searchLayout;
|
||||||
|
private RecyclerView resultList;
|
||||||
|
private List<String> histories;
|
||||||
|
private List<String> tempFuzzy;
|
||||||
|
private List<SearchResultObj.book> results;
|
||||||
|
private MyRecyclerViewAdapter recyclerViewAdapter;
|
||||||
|
private boolean isSubmit;
|
||||||
|
private boolean flag;
|
||||||
|
public Handler handler = new Handler();
|
||||||
|
private String[] hotBooks = {"一品娇宠","剑来","逆天邪神","神医嫡女","官梯",
|
||||||
|
"最强狂兵","无敌剑域","一世倾城","天骄战纪","元尊",
|
||||||
|
"天行","修罗武神","永夜君王","家有王妃初长成","神级奶爸",
|
||||||
|
"神医毒妃","战神狂飙","逆天邪神","神医嫡女","江山美色",
|
||||||
|
"圣墟","极品透视学生","正道潜龙","斗罗大陆","雪中悍刀行",
|
||||||
|
"枭臣","将夜","校花的贴身高手","大刁民","偷香高手",};
|
||||||
|
|
||||||
|
|
||||||
|
// 辅助函数:判断网络是否连接
|
||||||
|
public boolean isNetWorkConnected(Context context) {
|
||||||
|
if (context != null) {
|
||||||
|
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
|
||||||
|
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
|
||||||
|
if (mNetworkInfo != null) {
|
||||||
|
return mNetworkInfo.isConnected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_search);
|
||||||
|
isSubmit = false;
|
||||||
|
flag = true; //用于同步问题的布尔变量
|
||||||
|
//初始化列表
|
||||||
|
histories = getInstance(getBaseContext()).getAllHistory();
|
||||||
|
tempFuzzy = new ArrayList<>();
|
||||||
|
results = new ArrayList<>();
|
||||||
|
//获取控件
|
||||||
|
freshView = findViewById(R.id.search_fresh_image);
|
||||||
|
cancelView = findViewById(R.id.search_cancel_text);
|
||||||
|
searchView = findViewById(R.id.search_search_searchView);
|
||||||
|
deleteView = findViewById(R.id.search_delete_image);
|
||||||
|
historyList = findViewById(R.id.search_history_list);
|
||||||
|
fuzzyList = findViewById(R.id.search_fuzzy_list);
|
||||||
|
resultList = findViewById(R.id.search_result_list);
|
||||||
|
initialLayout = findViewById(R.id.search_initial_layout);
|
||||||
|
searchLayout = findViewById(R.id.search_afters_layout);
|
||||||
|
text1 = findViewById(R.id.search_pop_text1);
|
||||||
|
text2 = findViewById(R.id.search_pop_text2);
|
||||||
|
text3 = findViewById(R.id.search_pop_text3);
|
||||||
|
text4 = findViewById(R.id.search_pop_text4);
|
||||||
|
text5 = findViewById(R.id.search_pop_text5);
|
||||||
|
text6 = findViewById(R.id.search_pop_text6);
|
||||||
|
|
||||||
|
//设置历史列表adapter
|
||||||
|
final ArrayAdapter<String> historyAdapter = new ArrayAdapter<>(this,R.layout.item_listview,histories);
|
||||||
|
historyList.setAdapter(historyAdapter);
|
||||||
|
//设置结果列表adapter
|
||||||
|
recyclerViewAdapter = new MyRecyclerViewAdapter<SearchResultObj.book>(SearchActivity.this,R.layout.item_book,results) {
|
||||||
|
@Override
|
||||||
|
public void convert(MyViewHolder holder, final SearchResultObj.book book) {
|
||||||
|
TextView name = holder.getView(R.id.item_book_name);
|
||||||
|
name.setText(book.getTitle());
|
||||||
|
TextView author = holder.getView(R.id.item_book_author);
|
||||||
|
author.setText(book.getAuthor());
|
||||||
|
TextView major = holder.getView(R.id.item_book_type);
|
||||||
|
major.setText(book.getCat());
|
||||||
|
TextView intro = holder.getView(R.id.item_book_intro);
|
||||||
|
String introString = book.getShortIntro();
|
||||||
|
if (introString.length() > 50){
|
||||||
|
introString = introString.substring(0,49)+"……";
|
||||||
|
}
|
||||||
|
intro.setText(introString);
|
||||||
|
final ImageView cover = holder.getView(R.id.item_book_cover);
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
if (isNetWorkConnected(MainActivity.getContext())) {
|
||||||
|
URL url = new URL(BookService.StaticsUrl + book.getCover());
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setConnectTimeout(10000);
|
||||||
|
if (connection.getResponseCode() == 200) {
|
||||||
|
InputStream inputStream = connection.getInputStream();
|
||||||
|
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
|
||||||
|
handler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
cover.setImageBitmap(bitmap);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"网络似乎出现了点问题",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
recyclerViewAdapter.setOnItemClickListener(new MyRecyclerViewAdapter.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(final int position) {
|
||||||
|
final Intent intent = new Intent(SearchActivity.this, BookDetailActivity.class);
|
||||||
|
final Bundle bundle = new Bundle();
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isNetWorkConnected(MainActivity.getContext())) {
|
||||||
|
final BookObj t = getBookService().getBookById(results.get(position).get_id());
|
||||||
|
if (t != null)
|
||||||
|
handler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
bundle.putSerializable("bookobj", t);
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"网络似乎出现了点问题",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLongClick(int position) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
resultList.setAdapter(recyclerViewAdapter);
|
||||||
|
resultList.setLayoutManager(new LinearLayoutManager(this));
|
||||||
|
//设置模糊关联列表adapter
|
||||||
|
final ArrayAdapter<String> fuzzyAdapter = new ArrayAdapter<>(this,R.layout.item_listview2,tempFuzzy);
|
||||||
|
fuzzyList.setAdapter(fuzzyAdapter);
|
||||||
|
|
||||||
|
|
||||||
|
//设置热门搜索函数
|
||||||
|
text1.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String s = text1.getText().toString();
|
||||||
|
recordClick(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
text2.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String s = text2.getText().toString();
|
||||||
|
recordClick(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
text3.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String s = text3.getText().toString();
|
||||||
|
recordClick(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
text4.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String s = text4.getText().toString();
|
||||||
|
recordClick(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
text5.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String s = text5.getText().toString();
|
||||||
|
recordClick(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
text6.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String s = text6.getText().toString();
|
||||||
|
recordClick(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//设置搜索函数
|
||||||
|
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextSubmit(final String s) {
|
||||||
|
isSubmit = true;
|
||||||
|
//添加历史
|
||||||
|
if (!histories.contains(s)){
|
||||||
|
histories.add(s);
|
||||||
|
getInstance(getBaseContext()).addSearchHistory(s);
|
||||||
|
}
|
||||||
|
//设置可见
|
||||||
|
searchLayout.setVisibility(View.VISIBLE);
|
||||||
|
fuzzyList.setVisibility(View.GONE);
|
||||||
|
resultList.setVisibility(View.VISIBLE);
|
||||||
|
//填充数据
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isNetWorkConnected(MainActivity.getContext())) {
|
||||||
|
SearchResultObj tt = getBookService().getSearchResultObj(s, 0, 8);
|
||||||
|
results.clear();
|
||||||
|
if (tt != null) {
|
||||||
|
List<SearchResultObj.book> t = tt.getBookList();
|
||||||
|
results.addAll(t);
|
||||||
|
handler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
recyclerViewAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"搜索不到相关内容",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"网络似乎出现了点问题",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
recyclerViewAdapter.notifyDataSetChanged();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextChange(final String s) {
|
||||||
|
//设置可见
|
||||||
|
if (!isSubmit) {
|
||||||
|
if (s.equals("")) {
|
||||||
|
initialLayout.setVisibility(View.VISIBLE);
|
||||||
|
searchLayout.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
initialLayout.setVisibility(View.GONE);
|
||||||
|
searchLayout.setVisibility(View.VISIBLE);
|
||||||
|
fuzzyList.setVisibility(View.VISIBLE);
|
||||||
|
resultList.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (s.equals("")) {
|
||||||
|
fuzzyList.setVisibility(View.GONE);
|
||||||
|
resultList.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fuzzyList.setVisibility(View.VISIBLE);
|
||||||
|
resultList.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//填充数据
|
||||||
|
if (!s.equals("")&&flag) {
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
flag = false;
|
||||||
|
if (isNetWorkConnected(MainActivity.getContext())) {
|
||||||
|
SearchResultObj tt = getBookService().getSearchResultObj(s, 0, 8);
|
||||||
|
List<String> t = new ArrayList<>();
|
||||||
|
if (tt != null) {
|
||||||
|
List<SearchResultObj.book> tss = tt.getBookList();
|
||||||
|
int size = tss.size();
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
|
t.add(tss.get(i).getTitle());
|
||||||
|
}
|
||||||
|
tempFuzzy.clear();
|
||||||
|
if (t.size() > 0)
|
||||||
|
tempFuzzy.addAll(t);
|
||||||
|
handler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
fuzzyAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"网络似乎出现了点问题",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
fuzzyAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//设置历史删除函数
|
||||||
|
deleteView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
getInstance(getBaseContext()).deleteHistory();
|
||||||
|
histories.clear();
|
||||||
|
historyAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//设置历史点击函数
|
||||||
|
historyList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
final String s = histories.get(position);
|
||||||
|
recordClick(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//模糊搜索点击函数
|
||||||
|
fuzzyList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
final String s = tempFuzzy.get(position);
|
||||||
|
isSubmit = true;
|
||||||
|
//添加历史
|
||||||
|
if (!histories.contains(s)){
|
||||||
|
histories.add(s);
|
||||||
|
getInstance(getBaseContext()).addSearchHistory(s);
|
||||||
|
}
|
||||||
|
//设置可见
|
||||||
|
initialLayout.setVisibility(View.GONE);
|
||||||
|
searchLayout.setVisibility(View.VISIBLE);
|
||||||
|
fuzzyList.setVisibility(View.GONE);
|
||||||
|
resultList.setVisibility(View.VISIBLE);
|
||||||
|
//填充数据
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isNetWorkConnected(MainActivity.getContext())) {
|
||||||
|
SearchResultObj tt = getBookService().getSearchResultObj(s, 0, 8);
|
||||||
|
List<SearchResultObj.book> t = tt.getBookList();
|
||||||
|
results.clear();
|
||||||
|
if (t != null)
|
||||||
|
results.addAll(t);
|
||||||
|
handler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
recyclerViewAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"网络似乎出现了点问题",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
recyclerViewAdapter.notifyDataSetChanged();
|
||||||
|
searchView.setQuery(s,true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//取消按钮点击事件
|
||||||
|
cancelView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//更换热门图书函数
|
||||||
|
freshView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
freshPopBook();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
public void recordClick(final String s) {
|
||||||
|
isSubmit = true;
|
||||||
|
//设置可见
|
||||||
|
initialLayout.setVisibility(View.GONE);
|
||||||
|
searchLayout.setVisibility(View.VISIBLE);
|
||||||
|
fuzzyList.setVisibility(View.GONE);
|
||||||
|
resultList.setVisibility(View.VISIBLE);
|
||||||
|
//添加历史
|
||||||
|
if (!histories.contains(s)){
|
||||||
|
histories.add(s);
|
||||||
|
getInstance(getBaseContext()).addSearchHistory(s);
|
||||||
|
}
|
||||||
|
//填充数据
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isNetWorkConnected(MainActivity.getContext())) {
|
||||||
|
SearchResultObj tt = getBookService().getSearchResultObj(s, 0, 8);
|
||||||
|
results.clear();
|
||||||
|
if (tt != null) {
|
||||||
|
List<SearchResultObj.book> t = tt.getBookList();
|
||||||
|
results.addAll(t);
|
||||||
|
handler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
recyclerViewAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"搜索不到相关内容",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Looper.prepare();
|
||||||
|
Toast.makeText(SearchActivity.this,"网络似乎出现了点问题",Toast.LENGTH_SHORT).show();
|
||||||
|
Looper.loop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
recyclerViewAdapter.notifyDataSetChanged();
|
||||||
|
searchView.setQuery(s,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void freshPopBook() {
|
||||||
|
Random ra =new Random();
|
||||||
|
int t = ra.nextInt(29);
|
||||||
|
text1.setText(hotBooks[t]);
|
||||||
|
t = (t+1)%30;
|
||||||
|
text2.setText(hotBooks[t]);
|
||||||
|
t = (t+1)%30;
|
||||||
|
text3.setText(hotBooks[t]);
|
||||||
|
t = (t+1)%30;
|
||||||
|
text4.setText(hotBooks[t]);
|
||||||
|
t = (t+1)%30;
|
||||||
|
text5.setText(hotBooks[t]);
|
||||||
|
t = (t+1)%30;
|
||||||
|
text6.setText(hotBooks[t]);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
@startuml
|
||||||
|
'https://plantuml.com/sequence-diagram
|
||||||
|
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
Alice -> Bob: Authentication Request
|
||||||
|
Bob --> Alice: Authentication Response
|
||||||
|
|
||||||
|
Alice -> Bob: Another authentication Request
|
||||||
|
Alice <-- Bob: another authentication Response
|
||||||
|
@enduml
|
@ -0,0 +1,131 @@
|
|||||||
|
package com.example.Fragment;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.example.Activity.CategoryActivity;
|
||||||
|
import com.example.R;
|
||||||
|
import com.example.RecyclerView.MyRecyclerViewAdapter;
|
||||||
|
import com.example.RecyclerView.MyViewHolder;
|
||||||
|
|
||||||
|
// 排行榜界面
|
||||||
|
public class RankingFragment extends Fragment {
|
||||||
|
private boolean isMale; //男生/女生
|
||||||
|
private int color1 = Color.parseColor("#F5D6D6");//最热榜
|
||||||
|
private int color2 = Color.parseColor("#D8F8C2");//热搜榜
|
||||||
|
private int color3 = Color.parseColor("#F9EBB0");//潜力榜
|
||||||
|
private int color4 = Color.parseColor("#DBB5F4");//留存榜
|
||||||
|
private int color5 = Color.parseColor("#CEFDFD");//完结榜
|
||||||
|
|
||||||
|
private RecyclerView recyclerView;
|
||||||
|
private List<String> list = new ArrayList<>();
|
||||||
|
private MyRecyclerViewAdapter adapter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
Bundle bundle = getArguments();
|
||||||
|
this.isMale = bundle.getBoolean("isMale");
|
||||||
|
if (isMale) {
|
||||||
|
list.add("最热榜");
|
||||||
|
list.add("热搜榜");
|
||||||
|
list.add("潜力榜");
|
||||||
|
list.add("留存榜");
|
||||||
|
list.add("完结榜");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
list.add("热搜榜");
|
||||||
|
list.add("留存榜");
|
||||||
|
list.add("最热榜");
|
||||||
|
list.add("潜力榜");
|
||||||
|
list.add("完结榜");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
View view = inflater.inflate(R.layout.fragment_ranking, null);
|
||||||
|
recyclerView = view.findViewById(R.id.ranking_recycler);
|
||||||
|
//设置recyclerView的显示
|
||||||
|
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||||
|
adapter = new MyRecyclerViewAdapter<String>(getActivity(), R.layout.item_ranking, list) {
|
||||||
|
@Override
|
||||||
|
public void convert(MyViewHolder holder, String type) {
|
||||||
|
Bitmap bitmap = null;
|
||||||
|
int color = color1;
|
||||||
|
switch (type) {
|
||||||
|
case "最热榜":
|
||||||
|
if (isMale) bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.male_icon1, null);
|
||||||
|
else bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.female_icon1, null);
|
||||||
|
color = color1;
|
||||||
|
break;
|
||||||
|
case "热搜榜":
|
||||||
|
if (isMale) bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.male_icon2, null);
|
||||||
|
else bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.female_icon2, null);
|
||||||
|
color = color2;
|
||||||
|
break;
|
||||||
|
case "潜力榜":
|
||||||
|
if (isMale) bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.male_icon3, null);
|
||||||
|
else bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.female_icon3, null);
|
||||||
|
color = color3;
|
||||||
|
break;
|
||||||
|
case "留存榜":
|
||||||
|
if (isMale) bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.male_icon4, null);
|
||||||
|
else bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.female_icon4, null);
|
||||||
|
color = color4;
|
||||||
|
break;
|
||||||
|
case "完结榜":
|
||||||
|
if (isMale) bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.male_icon5, null);
|
||||||
|
else bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.female_icon5, null);
|
||||||
|
color = color5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ImageView imageView = holder.getView(R.id.ranking_item_image);
|
||||||
|
imageView.setImageBitmap(bitmap);
|
||||||
|
TextView textView = holder.getView(R.id.ranking_item_text);
|
||||||
|
textView.setText(type);
|
||||||
|
RelativeLayout layout = holder.getView(R.id.ranking_item_right);
|
||||||
|
layout.setBackgroundColor(color);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//设置RecyclerView的点击响应事件
|
||||||
|
adapter.setOnItemClickListener(new MyRecyclerViewAdapter.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(int position) {
|
||||||
|
//跳转到对应榜单界面
|
||||||
|
Intent intent = new Intent(getActivity(), CategoryActivity.class);
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putBoolean("isRanking", true);
|
||||||
|
bundle.putBoolean("isMale", isMale);
|
||||||
|
bundle.putString("title", list.get(position));
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLongClick(int position) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
recyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
package com.example.Fragment;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.example.R;
|
||||||
|
|
||||||
|
// 阅读界面的Fragment
|
||||||
|
public class ReadPageFragment extends Fragment {
|
||||||
|
// 页面数据
|
||||||
|
private String title; //章节名
|
||||||
|
private String content; //本章内容
|
||||||
|
int day_or_night_status; //日间或夜间模式
|
||||||
|
int textSize; //字体大小
|
||||||
|
|
||||||
|
// 帧页面View
|
||||||
|
View view;
|
||||||
|
// 帧页面控件
|
||||||
|
private TextView titile_control; // 标题
|
||||||
|
private TextView content_control; // 阅读页内容
|
||||||
|
private FrameLayout whole_layout_control; // 整个框页面
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
this.content = getArguments().getString("content");
|
||||||
|
this.title = getArguments().getString("title");
|
||||||
|
this.day_or_night_status = getArguments().getInt("day_or_night_status");
|
||||||
|
this.textSize = getArguments().getInt("textSize");
|
||||||
|
//System.out.println("日间夜间:" + day_or_night_status);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
// 获取帧页面View
|
||||||
|
view = inflater.inflate(R.layout.fragment_read_page, null);
|
||||||
|
|
||||||
|
// 获取页面控件
|
||||||
|
init_page_control();
|
||||||
|
|
||||||
|
// 设置页面内容
|
||||||
|
init_page_info();
|
||||||
|
|
||||||
|
//todo
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init_page_info() {
|
||||||
|
titile_control.setText(title); // 设置标题
|
||||||
|
content_control.setText(content); // 设置阅读页内容
|
||||||
|
content_control.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
|
||||||
|
if(day_or_night_status == 0) {
|
||||||
|
whole_layout_control.setBackgroundColor(getResources().getColor(R.color.PapayaWhip));
|
||||||
|
}
|
||||||
|
else whole_layout_control.setBackgroundColor(getResources().getColor(R.color.nightBackGround));
|
||||||
|
//progress_control.setText(Integer.toString(currentChapter+1) + "/" + Integer.toString(totalChapter+1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init_page_control() {
|
||||||
|
titile_control = view.findViewById(R.id.fragment_read_page_title);
|
||||||
|
content_control = view.findViewById(R.id.fragment_read_page_content);
|
||||||
|
whole_layout_control = view.findViewById(R.id.fragment_read_page_whole_layout);
|
||||||
|
//progress_control = view.findViewById(R.id.fragment_read_page_process);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.example.Fragment;
|
||||||
|
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
// 碎片适配器
|
||||||
|
public class TabFragmentPagerAdapter extends FragmentPagerAdapter {
|
||||||
|
private FragmentManager fm;
|
||||||
|
private List<Fragment> list;
|
||||||
|
|
||||||
|
public TabFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
|
||||||
|
super(fm);
|
||||||
|
this.fm = fm;
|
||||||
|
this.list = list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Fragment getItem(int i) {
|
||||||
|
return list.get(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return list.size();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.example.Fragment;
|
||||||
|
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v4.view.PagerAdapter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
// 碎片状态适配器
|
||||||
|
public class TabFragmentStatePagerAdapter extends android.support.v4.app.FragmentStatePagerAdapter {
|
||||||
|
private FragmentManager fm;
|
||||||
|
private List<Fragment> list;
|
||||||
|
|
||||||
|
public TabFragmentStatePagerAdapter(FragmentManager fm, List<Fragment> list) {
|
||||||
|
super(fm);
|
||||||
|
this.fm = fm;
|
||||||
|
this.list = list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemPosition(Object object) {
|
||||||
|
return PagerAdapter.POSITION_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Fragment getItem(int i) {
|
||||||
|
return list.get(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return list.size();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AllRankingObj {
|
||||||
|
|
||||||
|
// 男生
|
||||||
|
@SerializedName("male")
|
||||||
|
private List<subClass> maleList;
|
||||||
|
|
||||||
|
// 女生
|
||||||
|
@SerializedName("female")
|
||||||
|
private List<subClass> femaleList;
|
||||||
|
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
public List<subClass> getMaleList() {
|
||||||
|
return maleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<subClass> getFemaleList() {
|
||||||
|
return femaleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class subClass {
|
||||||
|
// 周榜id
|
||||||
|
@SerializedName("_id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
// 排行榜全名
|
||||||
|
@SerializedName("title")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
// 排行榜大图标
|
||||||
|
@SerializedName("cover")
|
||||||
|
private String cover;
|
||||||
|
|
||||||
|
@SerializedName("collapse")
|
||||||
|
private boolean collapse;
|
||||||
|
|
||||||
|
// 月榜id
|
||||||
|
@SerializedName("monthRank")
|
||||||
|
private String monthRank;
|
||||||
|
|
||||||
|
// 总榜id
|
||||||
|
@SerializedName("totalRank")
|
||||||
|
private String totalRank;
|
||||||
|
|
||||||
|
// 排行榜简称
|
||||||
|
@SerializedName("shortTitle")
|
||||||
|
private String shortTitle;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCover() {
|
||||||
|
return cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCollapse() {
|
||||||
|
return collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMonthRank() {
|
||||||
|
return monthRank;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTotalRank() {
|
||||||
|
return totalRank;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getShortTitle() {
|
||||||
|
return shortTitle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,166 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
// 书籍的对象
|
||||||
|
public class BookObj implements Serializable {
|
||||||
|
// 书籍id
|
||||||
|
@SerializedName("_id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
// 书籍标题
|
||||||
|
@SerializedName("title")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
// 书籍作者
|
||||||
|
@SerializedName("author")
|
||||||
|
private String author;
|
||||||
|
|
||||||
|
// 书籍介绍
|
||||||
|
@SerializedName("longIntro")
|
||||||
|
private String longIntro;
|
||||||
|
|
||||||
|
// 书籍简介
|
||||||
|
@SerializedName("shortIntro")
|
||||||
|
private String shortIntro;
|
||||||
|
|
||||||
|
// 书籍封面图
|
||||||
|
@SerializedName("cover")
|
||||||
|
private String cover;
|
||||||
|
|
||||||
|
@SerializedName("site")
|
||||||
|
private String site;
|
||||||
|
|
||||||
|
// 书籍一级分类
|
||||||
|
@SerializedName("majorCate")
|
||||||
|
private String majorCate;
|
||||||
|
|
||||||
|
// 书籍二级分类
|
||||||
|
@SerializedName("minorCate")
|
||||||
|
private String minorCate;
|
||||||
|
|
||||||
|
@SerializedName("sizetype")
|
||||||
|
private int sizetype;
|
||||||
|
|
||||||
|
@SerializedName("contentType")
|
||||||
|
private String contentType;
|
||||||
|
|
||||||
|
@SerializedName("allowMonthly")
|
||||||
|
private boolean allowMonthly;
|
||||||
|
|
||||||
|
@SerializedName("banned")
|
||||||
|
private int banned;
|
||||||
|
|
||||||
|
// 最近关注人数
|
||||||
|
@SerializedName("latelyFollower")
|
||||||
|
private int latelyFollower;
|
||||||
|
|
||||||
|
// 字数
|
||||||
|
@SerializedName("wordCount")
|
||||||
|
private int wordCount;
|
||||||
|
|
||||||
|
// 留存率
|
||||||
|
@SerializedName("retentionRatio")
|
||||||
|
private float retentionRatio;
|
||||||
|
|
||||||
|
// 最新章节
|
||||||
|
@SerializedName("lastChapter")
|
||||||
|
private String lastChapter;
|
||||||
|
|
||||||
|
@SerializedName("updated")
|
||||||
|
private String updated;
|
||||||
|
|
||||||
|
// 性别
|
||||||
|
@SerializedName("gender")
|
||||||
|
private String[] gender;
|
||||||
|
|
||||||
|
// 标签
|
||||||
|
@SerializedName("tags")
|
||||||
|
private String[] tags;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getShortIntro() {
|
||||||
|
return shortIntro;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShortIntro(String shortIntro) {
|
||||||
|
this.shortIntro = shortIntro;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCover() {
|
||||||
|
return cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSite() {
|
||||||
|
return site;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMajorCate() {
|
||||||
|
return majorCate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMinorCate() {
|
||||||
|
return minorCate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSizetype() {
|
||||||
|
return sizetype;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentType() {
|
||||||
|
return contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAllowMonthly() {
|
||||||
|
return allowMonthly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLongIntro() {
|
||||||
|
return longIntro;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getGender() {
|
||||||
|
return gender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBanned() {
|
||||||
|
return banned;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLatelyFollower() {
|
||||||
|
return latelyFollower;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getRetentionRatio() {
|
||||||
|
return retentionRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastChapter() {
|
||||||
|
return lastChapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWordCount() {
|
||||||
|
return wordCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUpdated() {
|
||||||
|
return updated;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CategoryObj {
|
||||||
|
// 书籍总数
|
||||||
|
@SerializedName("total")
|
||||||
|
private int total;
|
||||||
|
|
||||||
|
// 书籍列表
|
||||||
|
@SerializedName("books")
|
||||||
|
private List<BookObj> books;
|
||||||
|
|
||||||
|
// 获取结果
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
public int getTotal() {
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<BookObj> getBooks() {
|
||||||
|
return books;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class ChapterLinkObj implements Serializable {
|
||||||
|
// 章节链接
|
||||||
|
@SerializedName("link")
|
||||||
|
private String link;
|
||||||
|
|
||||||
|
// 章节标题
|
||||||
|
@SerializedName("title")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
// 是否不可读
|
||||||
|
@SerializedName("unreadable")
|
||||||
|
private boolean unreadable;
|
||||||
|
|
||||||
|
public ChapterLinkObj() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChapterLinkObj(String _link, String _title, boolean _unreadable) {
|
||||||
|
link = _link;
|
||||||
|
title = _title;
|
||||||
|
unreadable = _unreadable;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getLink() {
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUnreadable() {
|
||||||
|
return unreadable;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ChapterLinks implements Serializable {
|
||||||
|
public List<ChapterLinkObj> chapterLinkList;
|
||||||
|
|
||||||
|
public List<ChapterLinkObj> getChapterLinkList() {
|
||||||
|
return chapterLinkList;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
// 获取章节内容返回结果
|
||||||
|
public class ChapterObj {
|
||||||
|
// 请求结果
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
@SerializedName("chapter")
|
||||||
|
private Chapter ichapter;
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Chapter getIchapter() {
|
||||||
|
return ichapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 章节详情
|
||||||
|
*/
|
||||||
|
public class Chapter {
|
||||||
|
// 章节标题
|
||||||
|
@SerializedName("title")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
// 章节内容
|
||||||
|
@SerializedName("body")
|
||||||
|
private String body;
|
||||||
|
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBody() {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
// 获取一级分类返回结果
|
||||||
|
public class ClassificationObj1 {
|
||||||
|
// male分类
|
||||||
|
@SerializedName("male")
|
||||||
|
private List<SubClass1> maleList;
|
||||||
|
|
||||||
|
// female分类
|
||||||
|
@SerializedName("female")
|
||||||
|
private List<SubClass1> femaleList;
|
||||||
|
|
||||||
|
// picture分类
|
||||||
|
@SerializedName("picture")
|
||||||
|
private List<SubClass1> picList;
|
||||||
|
|
||||||
|
@SerializedName("press")
|
||||||
|
private List<SubClass1> pressList;
|
||||||
|
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
public List<SubClass1> getMaleList() {
|
||||||
|
return maleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SubClass1> getFemaleList() {
|
||||||
|
return femaleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SubClass1> getPicList() {
|
||||||
|
return picList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SubClass1> getPressList() {
|
||||||
|
return pressList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 一级分类
|
||||||
|
public class SubClass1 {
|
||||||
|
// 名称
|
||||||
|
@SerializedName("name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
// 书籍数量
|
||||||
|
@SerializedName("bookCount")
|
||||||
|
private int bookCount;
|
||||||
|
|
||||||
|
// monthlyCount?
|
||||||
|
@SerializedName("monthlyCount")
|
||||||
|
private int monthlyCount;
|
||||||
|
|
||||||
|
// 分类图标
|
||||||
|
@SerializedName("icon")
|
||||||
|
private String icon;
|
||||||
|
|
||||||
|
// 封面图链接
|
||||||
|
@SerializedName("bookCover")
|
||||||
|
private String[] bookCover;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBookCount() {
|
||||||
|
return bookCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMonthlyCount() {
|
||||||
|
return monthlyCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIcon() {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getBookCover() {
|
||||||
|
return bookCover;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ClassificationObj2 {
|
||||||
|
@SerializedName("male")
|
||||||
|
private List<SubClass2> maleList;
|
||||||
|
|
||||||
|
@SerializedName("female")
|
||||||
|
private List<SubClass2> femaleList;
|
||||||
|
|
||||||
|
@SerializedName("picture")
|
||||||
|
private List<SubClass2> picList;
|
||||||
|
|
||||||
|
@SerializedName("press")
|
||||||
|
private List<SubClass2> pressList;
|
||||||
|
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
public List<SubClass2> getMaleList() {
|
||||||
|
return maleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SubClass2> getFemaleList() {
|
||||||
|
return femaleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SubClass2> getPicList() {
|
||||||
|
return picList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SubClass2> getPressList() {
|
||||||
|
return pressList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SubClass2 {
|
||||||
|
@SerializedName("major")
|
||||||
|
private String major;
|
||||||
|
|
||||||
|
@SerializedName("mins")
|
||||||
|
private String[] mins;
|
||||||
|
|
||||||
|
public String getMajor() {
|
||||||
|
return major;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getMins() {
|
||||||
|
return mins;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
// 获取章节列表返回结果
|
||||||
|
public class CptListObj {
|
||||||
|
// 请求结果
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
@SerializedName("mixToc")
|
||||||
|
private mixToc imixToc;
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
public mixToc getImixToc() {
|
||||||
|
return imixToc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 章节列表
|
||||||
|
*/
|
||||||
|
public class mixToc {
|
||||||
|
@SerializedName("_id")
|
||||||
|
private String _id;
|
||||||
|
// 书籍id
|
||||||
|
@SerializedName("book")
|
||||||
|
private String book;
|
||||||
|
// 章节数
|
||||||
|
@SerializedName("chaptersCount1")
|
||||||
|
private int chaptersCount;
|
||||||
|
// 章节列表
|
||||||
|
@SerializedName("chapters")
|
||||||
|
public List<ChapterLinkObj> chapterLinks;
|
||||||
|
// 更新时间
|
||||||
|
@SerializedName("updated")
|
||||||
|
private String updated;
|
||||||
|
|
||||||
|
public String get_id() {
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBook() {
|
||||||
|
return book;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getChaptersCount() {
|
||||||
|
return chaptersCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ChapterLinkObj> getChapterLinks() {
|
||||||
|
return chapterLinks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUpdated() {
|
||||||
|
return updated;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
public class FuzzySearchResultObj {
|
||||||
|
@SerializedName("code")
|
||||||
|
private int code;
|
||||||
|
|
||||||
|
@SerializedName("msg")
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
@SerializedName("data")
|
||||||
|
private String[] data;
|
||||||
|
|
||||||
|
public int getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMsg() {
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
//
|
||||||
|
public class RecomListObj implements Serializable {
|
||||||
|
private List<BookObj> bookObjs;
|
||||||
|
|
||||||
|
public RecomListObj(List<BookObj> bookObjs) {
|
||||||
|
this.bookObjs = bookObjs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<BookObj> getBookObjs() {
|
||||||
|
return bookObjs;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,185 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
// 搜索结果对象
|
||||||
|
public class SearchResultObj {
|
||||||
|
// 书籍列表
|
||||||
|
@SerializedName("books")
|
||||||
|
private List<book> bookList;
|
||||||
|
|
||||||
|
// 总数
|
||||||
|
@SerializedName("total")
|
||||||
|
private int total;
|
||||||
|
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
public List<book> getBookList() {
|
||||||
|
return bookList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotal() {
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class book {
|
||||||
|
// 书籍id
|
||||||
|
@SerializedName("_id")
|
||||||
|
private String _id;
|
||||||
|
|
||||||
|
@SerializedName("hasCp")
|
||||||
|
private boolean hasCp;
|
||||||
|
|
||||||
|
// 书名
|
||||||
|
@SerializedName("title")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@SerializedName("aliases")
|
||||||
|
private String aliases;
|
||||||
|
|
||||||
|
// 一级分类
|
||||||
|
@SerializedName("cat")
|
||||||
|
private String cat;
|
||||||
|
|
||||||
|
// 作者
|
||||||
|
@SerializedName("author")
|
||||||
|
private String author;
|
||||||
|
|
||||||
|
@SerializedName("site")
|
||||||
|
private String site;
|
||||||
|
|
||||||
|
// 封面
|
||||||
|
@SerializedName("cover")
|
||||||
|
private String cover;
|
||||||
|
|
||||||
|
// 简介
|
||||||
|
@SerializedName("shortIntro")
|
||||||
|
private String shortIntro;
|
||||||
|
|
||||||
|
// 最新章节
|
||||||
|
@SerializedName("lastChapter")
|
||||||
|
private String lastChapter;
|
||||||
|
|
||||||
|
// 留存率
|
||||||
|
@SerializedName("retentionRatio")
|
||||||
|
private float retentionRatio;
|
||||||
|
|
||||||
|
@SerializedName("banned")
|
||||||
|
private int banned;
|
||||||
|
|
||||||
|
@SerializedName("allowMonthly")
|
||||||
|
private boolean allowMonthly;
|
||||||
|
|
||||||
|
// 关注人数
|
||||||
|
@SerializedName("latelyFollower")
|
||||||
|
private int latelyFollower;
|
||||||
|
|
||||||
|
// 字数
|
||||||
|
@SerializedName("wordCount")
|
||||||
|
private int wordCount;
|
||||||
|
|
||||||
|
// 类型
|
||||||
|
@SerializedName("contentType")
|
||||||
|
private String contentType;
|
||||||
|
|
||||||
|
@SerializedName("superscript")
|
||||||
|
private String superscript;
|
||||||
|
|
||||||
|
@SerializedName("sizetype")
|
||||||
|
private int sizetype;
|
||||||
|
|
||||||
|
@SerializedName("highlight")
|
||||||
|
private highlight mhighlight;
|
||||||
|
|
||||||
|
public String get_id() {
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isHasCp() {
|
||||||
|
return hasCp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAliases() {
|
||||||
|
return aliases;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCat() {
|
||||||
|
return cat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSite() {
|
||||||
|
return site;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCover() {
|
||||||
|
return cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getShortIntro() {
|
||||||
|
return shortIntro;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastChapter() {
|
||||||
|
return lastChapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getRetentionRatio() {
|
||||||
|
return retentionRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBanned() {
|
||||||
|
return banned;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAllowMonthly() {
|
||||||
|
return allowMonthly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLatelyFollower() {
|
||||||
|
return latelyFollower;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWordCount() {
|
||||||
|
return wordCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentType() {
|
||||||
|
return contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSuperscript() {
|
||||||
|
return superscript;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSizetype() {
|
||||||
|
return sizetype;
|
||||||
|
}
|
||||||
|
|
||||||
|
public highlight getMhighlight() {
|
||||||
|
return mhighlight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class highlight {
|
||||||
|
@SerializedName("title")
|
||||||
|
private String[] title;
|
||||||
|
|
||||||
|
public String[] getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,175 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
// 单独排行对象
|
||||||
|
public class SingleRankingObj {
|
||||||
|
@SerializedName("ranking")
|
||||||
|
private Ranking ranking;
|
||||||
|
|
||||||
|
@SerializedName("ok")
|
||||||
|
private boolean ok;
|
||||||
|
|
||||||
|
public Ranking getRanking() {
|
||||||
|
return ranking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOk() {
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Ranking {
|
||||||
|
// 周榜id
|
||||||
|
@SerializedName("_id")
|
||||||
|
private String _id;
|
||||||
|
|
||||||
|
// 更新时间
|
||||||
|
@SerializedName("updated")
|
||||||
|
private String updated;
|
||||||
|
|
||||||
|
// 排行榜全名
|
||||||
|
@SerializedName("title")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@SerializedName("tag")
|
||||||
|
private String tag;
|
||||||
|
|
||||||
|
// 排行榜大图标
|
||||||
|
@SerializedName("cover")
|
||||||
|
private String cover;
|
||||||
|
|
||||||
|
// 排行榜小图标
|
||||||
|
@SerializedName("icon")
|
||||||
|
private String icon;
|
||||||
|
|
||||||
|
@SerializedName("__v")
|
||||||
|
private String __v;
|
||||||
|
|
||||||
|
// 月榜id
|
||||||
|
@SerializedName("monthRank")
|
||||||
|
private String monthRank;
|
||||||
|
|
||||||
|
// 总榜id
|
||||||
|
@SerializedName("totalRank")
|
||||||
|
private String totalRank;
|
||||||
|
|
||||||
|
// 排行榜简称
|
||||||
|
@SerializedName("shortTitle")
|
||||||
|
private String shortTitle;
|
||||||
|
|
||||||
|
@SerializedName("created")
|
||||||
|
private String created;
|
||||||
|
|
||||||
|
@SerializedName("biTag")
|
||||||
|
private String biTag;
|
||||||
|
|
||||||
|
@SerializedName("isSub")
|
||||||
|
private boolean isSub;
|
||||||
|
|
||||||
|
@SerializedName("collapse")
|
||||||
|
private boolean collapse;
|
||||||
|
|
||||||
|
@SerializedName("new")
|
||||||
|
private boolean _new;
|
||||||
|
|
||||||
|
// 性别
|
||||||
|
@SerializedName("gender")
|
||||||
|
private String gender;
|
||||||
|
|
||||||
|
@SerializedName("priority")
|
||||||
|
private int priority;
|
||||||
|
|
||||||
|
// 书籍列表
|
||||||
|
@SerializedName("books")
|
||||||
|
private List<BookObj> bookList;
|
||||||
|
|
||||||
|
// 周榜id
|
||||||
|
@SerializedName("id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
// 总数
|
||||||
|
@SerializedName("total")
|
||||||
|
private int total;
|
||||||
|
|
||||||
|
public String get_id() {
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUpdated() {
|
||||||
|
return updated;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTag() {
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCover() {
|
||||||
|
return cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIcon() {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String get__v() {
|
||||||
|
return __v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMonthRank() {
|
||||||
|
return monthRank;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTotalRank() {
|
||||||
|
return totalRank;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getShortTitle() {
|
||||||
|
return shortTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCreated() {
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBiTag() {
|
||||||
|
return biTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSub() {
|
||||||
|
return isSub;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCollapse() {
|
||||||
|
return collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean is_new() {
|
||||||
|
return _new;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGender() {
|
||||||
|
return gender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPriority() {
|
||||||
|
return priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<BookObj> getBookList() {
|
||||||
|
return bookList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotal() {
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.example.Object;
|
||||||
|
// 用户状态对象
|
||||||
|
public class UserStatusObj {
|
||||||
|
int user_id;
|
||||||
|
int hor_or_ver_screen;
|
||||||
|
int day_or_night_status;
|
||||||
|
int textSize;
|
||||||
|
|
||||||
|
public UserStatusObj(int user_id, int hor_or_ver_screen, int day_or_night_status, int textSize) {
|
||||||
|
this.user_id = user_id;
|
||||||
|
this.hor_or_ver_screen = hor_or_ver_screen;
|
||||||
|
this.day_or_night_status = day_or_night_status;
|
||||||
|
this.textSize = textSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDay_or_night_status() {
|
||||||
|
return day_or_night_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHor_or_ver_screen() {
|
||||||
|
return hor_or_ver_screen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTextSize() {
|
||||||
|
return textSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getUser_id() {
|
||||||
|
return user_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDay_or_night_status(int dat_or_night_status) {
|
||||||
|
this.day_or_night_status = dat_or_night_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHor_or_ver_screen(int hor_or_ver_screen) {
|
||||||
|
this.hor_or_ver_screen = hor_or_ver_screen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTextSize(int textSize) {
|
||||||
|
this.textSize = textSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser_id(int user_id) {
|
||||||
|
this.user_id = user_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.example.RecyclerView;
|
||||||
|
// 分类的实体
|
||||||
|
public class CategoryRecyObj {
|
||||||
|
private String categoryName;
|
||||||
|
private String bookCount;
|
||||||
|
|
||||||
|
public CategoryRecyObj(String categoryName, String bookCount) {
|
||||||
|
this.categoryName = categoryName;
|
||||||
|
this.bookCount = bookCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBookCount() {
|
||||||
|
return bookCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCategoryName() {
|
||||||
|
return categoryName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBookCount(String bookCount) {
|
||||||
|
this.bookCount = bookCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategoryName(String categoryName) {
|
||||||
|
this.categoryName = categoryName;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.example.RecyclerView;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.util.SparseArray;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
// ViewHolder用来复用列表中的控件
|
||||||
|
public class MyViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
private SparseArray<View> views;
|
||||||
|
private View view;
|
||||||
|
private boolean isNormalType;
|
||||||
|
|
||||||
|
public void setNormalTypeType(boolean type) {
|
||||||
|
this.isNormalType = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNormalType() {
|
||||||
|
return isNormalType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MyViewHolder(Context _context, View _view, ViewGroup _viewGroup){
|
||||||
|
super(_view);
|
||||||
|
view = _view;
|
||||||
|
views = new SparseArray<View>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MyViewHolder get(Context _context, ViewGroup _viewGroup, int _layoutId) {
|
||||||
|
View _view = LayoutInflater.from(_context).inflate(_layoutId, _viewGroup, false);
|
||||||
|
MyViewHolder holder = new MyViewHolder(_context, _view, _viewGroup);
|
||||||
|
return holder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends View> T getView(int _viewId) {
|
||||||
|
View _view = views.get(_viewId);
|
||||||
|
if (_view == null) {
|
||||||
|
// 创建view
|
||||||
|
_view = view.findViewById(_viewId);
|
||||||
|
// 将view存入views
|
||||||
|
views.put(_viewId, _view);
|
||||||
|
}
|
||||||
|
return (T)_view;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.example.RecyclerView;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
// 排行榜实体类
|
||||||
|
public class RankRecyObj {
|
||||||
|
private Bitmap image;
|
||||||
|
private String name;
|
||||||
|
private int color;
|
||||||
|
|
||||||
|
public RankRecyObj(Bitmap image, String name, int color) {
|
||||||
|
this.image = image;
|
||||||
|
this.name = name;
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bitmap getImage() {
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<!-- 边框颜色值 -->
|
||||||
|
<item>
|
||||||
|
<shape>
|
||||||
|
<solid android:color="@color/colorGrey" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<!-- 主体背景颜色值 -->
|
||||||
|
<item android:top="1dp" android:right="1dp" android:left="1dp" android:bottom="1dp">
|
||||||
|
<shape>
|
||||||
|
<solid android:color="#ffffff" />
|
||||||
|
<padding android:bottom="10dp"
|
||||||
|
android:left="10dp"
|
||||||
|
android:right="10dp"
|
||||||
|
android:top="10dp" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
<size android:width="10dp"/>
|
||||||
|
<stroke android:width="0.5dp" android:color="@color/colorGrey"></stroke>
|
||||||
|
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/>
|
||||||
|
<corners android:topLeftRadius="10dp" android:bottomLeftRadius="10dp"
|
||||||
|
android:topRightRadius="10dp" android:bottomRightRadius="10dp"/>
|
||||||
|
</shape>
|
@ -0,0 +1,170 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportHeight="108"
|
||||||
|
android:viewportWidth="108">
|
||||||
|
<path
|
||||||
|
android:fillColor="#26A69A"
|
||||||
|
android:pathData="M0,0h108v108h-108z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M9,0L9,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,0L19,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M29,0L29,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M39,0L39,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M49,0L49,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M59,0L59,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M69,0L69,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M79,0L79,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M89,0L89,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M99,0L99,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,9L108,9"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,19L108,19"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,29L108,29"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,39L108,39"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,49L108,49"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,59L108,59"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,69L108,69"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,79L108,79"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,89L108,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,99L108,99"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,29L89,29"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,39L89,39"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,49L89,49"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,59L89,59"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,69L89,69"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,79L89,79"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M29,19L29,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M39,19L39,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M49,19L49,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M59,19L59,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M69,19L69,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M79,19L79,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
</vector>
|
@ -0,0 +1,34 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:aapt="http://schemas.android.com/aapt"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportHeight="108"
|
||||||
|
android:viewportWidth="108">
|
||||||
|
<path
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
||||||
|
android:strokeColor="#00000000"
|
||||||
|
android:strokeWidth="1">
|
||||||
|
<aapt:attr name="android:fillColor">
|
||||||
|
<gradient
|
||||||
|
android:endX="78.5885"
|
||||||
|
android:endY="90.9159"
|
||||||
|
android:startX="48.7653"
|
||||||
|
android:startY="61.0927"
|
||||||
|
android:type="linear">
|
||||||
|
<item
|
||||||
|
android:color="#44000000"
|
||||||
|
android:offset="0.0" />
|
||||||
|
<item
|
||||||
|
android:color="#00000000"
|
||||||
|
android:offset="1.0" />
|
||||||
|
</gradient>
|
||||||
|
</aapt:attr>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:fillType="nonZero"
|
||||||
|
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
||||||
|
android:strokeColor="#00000000"
|
||||||
|
android:strokeWidth="1" />
|
||||||
|
</vector>
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="#FF0000" android:state_pressed="false" android:state_selected="true" />
|
||||||
|
<item android:color="#FF0000" android:state_checked="true" android:state_pressed="false" />
|
||||||
|
<item android:color="#000000" />
|
||||||
|
</selector>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
|
||||||
|
<solid android:color="#ffffff" />
|
||||||
|
<stroke android:width="1dip" android:color="#4fa5d5"/>
|
||||||
|
<corners android:radius="2dp"/>
|
||||||
|
<padding
|
||||||
|
android:bottom="3dp"
|
||||||
|
android:left="3dp"
|
||||||
|
android:right="3dp"
|
||||||
|
android:top="3dp"/>
|
||||||
|
</shape>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
|
||||||
|
<solid android:color="#ffffff" />
|
||||||
|
<stroke android:width="1dip" android:color="#90F790"/>
|
||||||
|
<corners android:radius="2dp"/>
|
||||||
|
<padding
|
||||||
|
android:bottom="3dp"
|
||||||
|
android:left="3dp"
|
||||||
|
android:right="3dp"
|
||||||
|
android:top="3dp"/>
|
||||||
|
</shape>
|
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<!-- 边框颜色值 -->
|
||||||
|
<item>
|
||||||
|
<shape>
|
||||||
|
<solid android:color="@color/colorGrey" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<!-- 主体背景颜色值 -->
|
||||||
|
<item android:top="1dp" android:right="1dp" android:left="1dp" android:bottom="1dp">
|
||||||
|
<shape>
|
||||||
|
<solid android:color="#ffffff" />
|
||||||
|
<padding android:bottom="10dp"
|
||||||
|
android:left="10dp"
|
||||||
|
android:right="10dp"
|
||||||
|
android:top="10dp" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
<size android:width="10dp"/>
|
||||||
|
<stroke android:width="0.5dp" android:color="@color/colorGrey"></stroke>
|
||||||
|
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/>
|
||||||
|
<corners android:topLeftRadius="10dp" android:bottomLeftRadius="10dp"
|
||||||
|
android:topRightRadius="10dp" android:bottomRightRadius="10dp"/>
|
||||||
|
</shape>
|
@ -0,0 +1,170 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportHeight="108"
|
||||||
|
android:viewportWidth="108">
|
||||||
|
<path
|
||||||
|
android:fillColor="#26A69A"
|
||||||
|
android:pathData="M0,0h108v108h-108z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M9,0L9,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,0L19,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M29,0L29,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M39,0L39,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M49,0L49,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M59,0L59,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M69,0L69,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M79,0L79,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M89,0L89,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M99,0L99,108"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,9L108,9"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,19L108,19"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,29L108,29"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,39L108,39"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,49L108,49"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,59L108,59"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,69L108,69"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,79L108,79"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,89L108,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,99L108,99"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,29L89,29"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,39L89,39"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,49L89,49"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,59L89,59"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,69L89,69"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,79L89,79"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M29,19L29,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M39,19L39,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M49,19L49,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M59,19L59,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M69,19L69,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M79,19L79,89"
|
||||||
|
android:strokeColor="#33FFFFFF"
|
||||||
|
android:strokeWidth="0.8" />
|
||||||
|
</vector>
|
@ -0,0 +1,34 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:aapt="http://schemas.android.com/aapt"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportHeight="108"
|
||||||
|
android:viewportWidth="108">
|
||||||
|
<path
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
||||||
|
android:strokeColor="#00000000"
|
||||||
|
android:strokeWidth="1">
|
||||||
|
<aapt:attr name="android:fillColor">
|
||||||
|
<gradient
|
||||||
|
android:endX="78.5885"
|
||||||
|
android:endY="90.9159"
|
||||||
|
android:startX="48.7653"
|
||||||
|
android:startY="61.0927"
|
||||||
|
android:type="linear">
|
||||||
|
<item
|
||||||
|
android:color="#44000000"
|
||||||
|
android:offset="0.0" />
|
||||||
|
<item
|
||||||
|
android:color="#00000000"
|
||||||
|
android:offset="1.0" />
|
||||||
|
</gradient>
|
||||||
|
</aapt:attr>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:fillType="nonZero"
|
||||||
|
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
||||||
|
android:strokeColor="#00000000"
|
||||||
|
android:strokeWidth="1" />
|
||||||
|
</vector>
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="#FF0000" android:state_pressed="false" android:state_selected="true" />
|
||||||
|
<item android:color="#FF0000" android:state_checked="true" android:state_pressed="false" />
|
||||||
|
<item android:color="#000000" />
|
||||||
|
</selector>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
|
||||||
|
<solid android:color="#ffffff" />
|
||||||
|
<stroke android:width="1dip" android:color="#4fa5d5"/>
|
||||||
|
<corners android:radius="2dp"/>
|
||||||
|
<padding
|
||||||
|
android:bottom="3dp"
|
||||||
|
android:left="3dp"
|
||||||
|
android:right="3dp"
|
||||||
|
android:top="3dp"/>
|
||||||
|
</shape>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
|
||||||
|
<solid android:color="#ffffff" />
|
||||||
|
<stroke android:width="1dip" android:color="#90F790"/>
|
||||||
|
<corners android:radius="2dp"/>
|
||||||
|
<padding
|
||||||
|
android:bottom="3dp"
|
||||||
|
android:left="3dp"
|
||||||
|
android:right="3dp"
|
||||||
|
android:top="3dp"/>
|
||||||
|
</shape>
|
@ -0,0 +1,280 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.constraint.ConstraintLayout 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:layout_marginTop="10dp"
|
||||||
|
tools:context=".Activity.BookDetailActivity">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/top_RL"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/detail_scrollview"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/detail_back"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:src="@mipmap/back" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text=""
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:textSize="20sp" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:id="@+id/detail_scrollview"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:fillViewport="true"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/top_RL">
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/detail_topLL"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<android.support.constraint.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/detail_cover"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="150dp" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_bookTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="top"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:text=""
|
||||||
|
android:textSize="22sp"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/detail_cover"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/detail_cover" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_TV"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:text=""
|
||||||
|
android:textColor="@color/colorGrey"
|
||||||
|
android:textSize="14sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/detail_update"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/detail_cover"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/detail_bookTitle" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_update"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text=""
|
||||||
|
android:textColor="@color/colorRed"
|
||||||
|
android:textSize="14sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/detail_cover"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/detail_cover" />
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:background="@drawable/card_edge">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_follower1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:text="人数: "
|
||||||
|
android:textColor="@color/colorGrey"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_follower2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_toRightOf="@id/detail_follower1"
|
||||||
|
android:text=""
|
||||||
|
android:textColor="@color/colorBlack"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_retentionRatio1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:layout_toLeftOf="@+id/detail_retentionRatio2"
|
||||||
|
android:text="读者留存率: "
|
||||||
|
android:textColor="@color/colorGrey"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_retentionRatio2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:text=""
|
||||||
|
android:textColor="@color/colorBlack"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_longIntro"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:text=""
|
||||||
|
android:textSize="12sp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/detail_CV" />
|
||||||
|
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="5dp"
|
||||||
|
android:background="@color/colorGrey"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/detail_midRL"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/detail_topLL" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/detail_midRL"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/detail_topLL">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_recomTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="同类推荐"
|
||||||
|
android:textColor="@color/colorBlack"
|
||||||
|
android:textSize="18sp" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/detail_more"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignTop="@id/detail_recomTitle"
|
||||||
|
android:layout_alignBottom="@id/detail_recomTitle"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:background="@null"
|
||||||
|
android:text="更多"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textColor="@color/colorGrey"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/detail_recomRG"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/detail_recomTitle"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:weightSum="3">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/detail_recom1"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="180dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@null"
|
||||||
|
android:text=""
|
||||||
|
android:textSize="10sp" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/detail_recom2"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="180dp"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@null"
|
||||||
|
android:text=""
|
||||||
|
android:textSize="10sp" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/detail_recom3"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="180dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@null"
|
||||||
|
android:text=""
|
||||||
|
android:textSize="10sp" />
|
||||||
|
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/detail_bottomRG"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent">
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/detail_bottom_add"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@drawable/buttonstyle"
|
||||||
|
android:button="@null"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:text="加入书架"
|
||||||
|
android:textColor="@color/colorRed"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/detail_bottom_read"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@drawable/buttonstyle"
|
||||||
|
android:button="@null"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:text="免费阅读"
|
||||||
|
android:textColor="@color/colorRed"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout 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"
|
||||||
|
tools:context=".Activity.CategoryActivity"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="#F7F7F7">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp">
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/category_activity_back"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:src="@mipmap/back"
|
||||||
|
/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/category_activity_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="热搜榜"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:gravity="center"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/category_activity_RG"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_marginTop="10dp">
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/category_activity_RB1"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="周榜"
|
||||||
|
android:checked="true"/>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/category_activity_RB2"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="月榜"/>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/category_activity_RB3"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="总榜"/>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/category_activity_RB4"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="完结"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/category_activity_viewPager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Activity.MainActivity"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="#FFFFFF">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginTop="10dp">
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/main_top_RG"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_alignParentBottom="true">
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/main_top_male"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:button="@null"
|
||||||
|
android:drawableTop="@mipmap/male_blue"
|
||||||
|
android:checked="true"/>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/main_top_female"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:button="@null"
|
||||||
|
android:drawableTop="@mipmap/female_black" />
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
<!--标题:书架/排行榜/分类-->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/main_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="书架"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textColor="#030303"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_centerHorizontal="true"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/main_search"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:src="@mipmap/search"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_marginEnd="10dp"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/main_viewPager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:overScrollMode="never"
|
||||||
|
android:scrollbars="none"/>
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/main_bottomRG"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/main_bottom_bookshelf"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="书架"
|
||||||
|
android:drawableTop="@mipmap/bookshelf"
|
||||||
|
android:checked="true"
|
||||||
|
/>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/main_bottom_ranking"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="排行榜"
|
||||||
|
android:drawableTop="@mipmap/ranking"
|
||||||
|
/>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/main_bottom_category"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="分类"
|
||||||
|
android:drawableTop="@mipmap/category"/>
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,98 @@
|
|||||||
|
<?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"
|
||||||
|
android:id="@+id/read_page_whole_layout"
|
||||||
|
android:background="@color/PapayaWhip">
|
||||||
|
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/read_page_viewPager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:overScrollMode="never"
|
||||||
|
android:layout_marginBottom="40sp" />
|
||||||
|
|
||||||
|
<!--底部UI-->
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/activity_read_page_bottom_layout"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_marginBottom="10sp"
|
||||||
|
android:layout_marginLeft="20sp"
|
||||||
|
android:layout_marginRight="10sp">
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/activity_read_page_battery_layout"
|
||||||
|
android:layout_centerVertical="true">
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="30sp"
|
||||||
|
android:layout_height="10sp"
|
||||||
|
android:src="@mipmap/battery"/>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:id="@+id/activity_read_page_battery_percent"
|
||||||
|
android:text="87"
|
||||||
|
android:textSize="7sp"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/activity_read_page_time"
|
||||||
|
android:text="11:15"
|
||||||
|
android:layout_toRightOf="@id/activity_read_page_battery_layout" />
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/activity_read_page_process"
|
||||||
|
android:text="1/8"
|
||||||
|
android:layout_alignParentRight="true" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/read_page_progressbar"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"/>
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/read_page_bottom_rg"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:clickable="false"
|
||||||
|
android:visibility="gone">
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/read_page_day_and_night_rb"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="夜间"
|
||||||
|
android:drawableTop="@mipmap/nighttime" />
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/read_page_horizontal_and_vertical_rb"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="横屏"
|
||||||
|
android:drawableTop="@mipmap/horizontal_screen" />
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/read_page_setting_rb"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="设置"
|
||||||
|
android:drawableTop="@mipmap/textsize" />
|
||||||
|
<!--<RadioButton
|
||||||
|
android:id="@+id/read_page_download_rb"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="下载"
|
||||||
|
android:drawableTop="@mipmap/download"/>-->
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/read_page_catalog_rb"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:text="目录"
|
||||||
|
android:drawableTop="@mipmap/catalog"/>
|
||||||
|
</RadioGroup>
|
||||||
|
</RelativeLayout>
|
@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout 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:orientation="vertical"
|
||||||
|
tools:context=".Activity.RecomActivity"
|
||||||
|
android:background="#FFFFFF">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:id="@+id/recom_RL">
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/recom_back"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:src="@mipmap/back"
|
||||||
|
/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/recom_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="同类推荐"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:gravity="center"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:id="@+id/recom_recyclerview"
|
||||||
|
android:layout_centerHorizontal="true">
|
||||||
|
|
||||||
|
</android.support.v7.widget.RecyclerView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,295 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.constraint.ConstraintLayout 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"
|
||||||
|
tools:context=".Activity.SearchActivity"
|
||||||
|
android:background="#FFFFFF">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/search_afters_layout"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="invisible"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_top_layout">
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/search_fuzzy_list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:divider="@null" />
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/search_result_list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginTop="1dp"
|
||||||
|
android:layout_marginBottom="60dp"
|
||||||
|
android:visibility="invisible" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<android.support.constraint.ConstraintLayout
|
||||||
|
android:id="@+id/search_initial_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_top_layout">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_n1_image"
|
||||||
|
android:layout_width="18dp"
|
||||||
|
android:layout_height="18dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/search_pop_text1"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/search_pop_text1"
|
||||||
|
app:srcCompat="@mipmap/number1" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_n2_image"
|
||||||
|
android:layout_width="18dp"
|
||||||
|
android:layout_height="18dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/search_pop_text1"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/guideline3"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/search_pop_text1"
|
||||||
|
app:srcCompat="@mipmap/number2" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_n3_image"
|
||||||
|
android:layout_width="18dp"
|
||||||
|
android:layout_height="18dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/search_pop_text2"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/search_pop_text2"
|
||||||
|
app:srcCompat="@mipmap/number3" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_n4_image"
|
||||||
|
android:layout_width="18dp"
|
||||||
|
android:layout_height="18dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/search_pop_text2"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/guideline3"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/search_pop_text2"
|
||||||
|
app:srcCompat="@mipmap/number4" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_n5_image"
|
||||||
|
android:layout_width="18dp"
|
||||||
|
android:layout_height="18dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/search_pop_text3"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/search_pop_text3"
|
||||||
|
app:srcCompat="@mipmap/number5" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_n6_image"
|
||||||
|
android:layout_width="18dp"
|
||||||
|
android:layout_height="18dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/search_pop_text3"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/guideline3"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/search_pop_text3"
|
||||||
|
app:srcCompat="@mipmap/number6" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_fresh_image"
|
||||||
|
android:layout_width="23dp"
|
||||||
|
android:layout_height="23dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/textView8"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/textView8"
|
||||||
|
app:srcCompat="@mipmap/fresh" />
|
||||||
|
|
||||||
|
<android.support.constraint.Guideline
|
||||||
|
android:id="@+id/guideline2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
app:layout_constraintGuide_percent="0.2" />
|
||||||
|
|
||||||
|
<android.support.constraint.Guideline
|
||||||
|
android:id="@+id/guideline3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintGuide_percent="0.5" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_popular_image"
|
||||||
|
android:layout_width="23dp"
|
||||||
|
android:layout_height="23dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginTop="18dp"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:srcCompat="@mipmap/heatfire" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_pop_text1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="23dp"
|
||||||
|
android:text="天骄战纪"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_n1_image"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView8" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_pop_text2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="18dp"
|
||||||
|
android:text="最强狂兵"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_n3_image"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_pop_text1" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_pop_text3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="18dp"
|
||||||
|
android:text="九星霸体诀"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_n5_image"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_pop_text2" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_pop_text4"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="23dp"
|
||||||
|
android:text="官梯"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_n2_image"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/textView8" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_pop_text5"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="18dp"
|
||||||
|
android:text="剑来"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_n4_image"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_pop_text4" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_pop_text6"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="18dp"
|
||||||
|
android:text="一世倾城"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_n6_image"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_pop_text5" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView8"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:text="大家都在搜"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/search_popular_image"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_popular_image"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/search_popular_image" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_history_image"
|
||||||
|
android:layout_width="23dp"
|
||||||
|
android:layout_height="23dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_pop_text3"
|
||||||
|
app:srcCompat="@mipmap/history" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_history_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="30dp"
|
||||||
|
android:text="搜索历史"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/search_history_image"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_pop_text3" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/search_delete_image"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_marginEnd="22dp"
|
||||||
|
android:layout_marginTop="30dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_pop_text6"
|
||||||
|
app:srcCompat="@mipmap/delete" />
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/search_history_list"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:divider="@null"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/search_history_image" />
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
||||||
|
|
||||||
|
<android.support.constraint.ConstraintLayout
|
||||||
|
android:id="@+id/search_top_layout"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="42dp"
|
||||||
|
android:background="@android:color/holo_red_light"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<android.support.v7.widget.SearchView
|
||||||
|
android:id="@+id/search_search_searchView"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:background="@android:color/background_light"
|
||||||
|
app:defaultQueryHint="搜索作者或者书名"
|
||||||
|
app:iconifiedByDefault="false"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/search_cancel_text"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/search_cancel_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:text="取消"
|
||||||
|
android:textColor="?attr/colorBackgroundFloating"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/catalog_title"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="40sp"
|
||||||
|
android:text="圣墟"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:gravity="center|center_horizontal"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/colorGrey"
|
||||||
|
android:id="@+id/catalog_line"
|
||||||
|
android:layout_marginBottom="5dp">
|
||||||
|
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/catalog_recylerView">
|
||||||
|
|
||||||
|
</android.support.v7.widget.RecyclerView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Fragment.CategoryFragment"
|
||||||
|
android:background="#F7F7F7">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="20sp"
|
||||||
|
android:layout_marginRight="20sp"
|
||||||
|
android:layout_marginTop="10sp"
|
||||||
|
android:layout_marginBottom="10sp"
|
||||||
|
android:background="#F7F7F7">
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/dialog_category_recyclerview"
|
||||||
|
android:layout_centerHorizontal="true">
|
||||||
|
|
||||||
|
</android.support.v7.widget.RecyclerView>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<!--字体大小调整-->
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true">
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/dialog_text_setting_minus_imageview"
|
||||||
|
android:background="@drawable/buttonstyle"
|
||||||
|
android:src="@mipmap/minus"
|
||||||
|
android:layout_margin="10sp"/>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="18"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textSize="30sp"
|
||||||
|
android:layout_margin="10sp"
|
||||||
|
android:id="@+id/dialog_text_setting_textSize"
|
||||||
|
android:layout_toRightOf="@+id/dialog_text_setting_minus_imageview"
|
||||||
|
android:layout_toLeftOf="@+id/dialog_text_setting_plus_imageview"/>
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/dialog_text_setting_plus_imageview"
|
||||||
|
android:background="@drawable/buttonstyle"
|
||||||
|
android:src="@mipmap/plus"
|
||||||
|
android:layout_margin="10sp"
|
||||||
|
android:layout_alignParentRight="true"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
<!--字体间距调整-->
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
</RelativeLayout>
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Fragment.BookShelfFragment">
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/fragment_book_shelf_recyclerview"
|
||||||
|
android:overScrollMode="never"
|
||||||
|
android:scrollbars="none">
|
||||||
|
</android.support.v7.widget.RecyclerView>
|
||||||
|
|
||||||
|
</FrameLayout>
|
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Fragment.CategoryFragment">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/category_RG"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/category_RB_male"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="男生"
|
||||||
|
android:checked="true"/>
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/category_RB_female"
|
||||||
|
style="@style/BottomRB"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="女生"/>
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/category_viewPager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:overScrollMode="never"
|
||||||
|
android:scrollbars="none">
|
||||||
|
</android.support.v4.view.ViewPager>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</FrameLayout>
|
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Fragment.DetailCategoryFragment"
|
||||||
|
android:background="#FFFFFF">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/detail_category_progressBar"
|
||||||
|
android:layout_width="50dp"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:visibility="visible"
|
||||||
|
style="?android:attr/progressBarStyleLargeInverse"
|
||||||
|
/>
|
||||||
|
<android.support.v4.widget.SwipeRefreshLayout
|
||||||
|
android:id="@+id/detail_category_swipeRefresh"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_width="match_parent">
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/detail_category_recyclerView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:overScrollMode="never"/>
|
||||||
|
</android.support.v4.widget.SwipeRefreshLayout>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</FrameLayout>
|
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Fragment.MaleInCategoryFragment"
|
||||||
|
android:background="#F7F7F7">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/fragment_male_in_category_recyclerview"
|
||||||
|
android:overScrollMode="never">
|
||||||
|
|
||||||
|
</android.support.v7.widget.RecyclerView>
|
||||||
|
|
||||||
|
</FrameLayout>
|
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".Fragment.RankingFragment">
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/ranking_recycler"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:overScrollMode="never"
|
||||||
|
android:layout_margin="5dp"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
@ -0,0 +1,103 @@
|
|||||||
|
<?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="wrap_content"
|
||||||
|
android:layout_margin="20sp"
|
||||||
|
android:background="#FFFFFF">
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="70sp"
|
||||||
|
android:layout_height="100sp"
|
||||||
|
android:scaleType="fitXY"
|
||||||
|
android:id="@+id/item_book_cover"
|
||||||
|
android:src="@mipmap/bookcover"
|
||||||
|
android:layout_centerVertical="true"/>
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_text_info_relativelayout"
|
||||||
|
android:layout_toRightOf="@+id/item_book_cover"
|
||||||
|
android:layout_marginLeft="20sp"
|
||||||
|
android:layout_centerVertical="true">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:id="@+id/item_book_rankingImg"
|
||||||
|
android:src="@mipmap/first"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_name"
|
||||||
|
android:text="圣墟"
|
||||||
|
android:textSize="15sp"
|
||||||
|
android:textColor="@color/bookItemNameColor"
|
||||||
|
android:layout_toRightOf="@id/item_book_rankingImg"/>
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_author_and_type_linearlayout"
|
||||||
|
android:layout_below="@+id/item_book_name"
|
||||||
|
android:layout_marginTop="5sp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_author"
|
||||||
|
android:text="辰东"/>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_vertical_line"
|
||||||
|
android:text="|"
|
||||||
|
android:layout_toEndOf="@id/item_book_author"
|
||||||
|
android:layout_marginLeft="10sp"
|
||||||
|
android:layout_marginRight="10sp" />
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_type"
|
||||||
|
android:text="玄幻"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_intro"
|
||||||
|
android:layout_below="@id/item_book_author_and_type_linearlayout"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:layout_marginTop="5sp"
|
||||||
|
android:text="在破败中崛起,在寂灭中复苏。沧海成尘,雷电枯竭,那一缕幽雾有一次临近大地,..."/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_followers"
|
||||||
|
android:text="12万人追"
|
||||||
|
android:textSize="10sp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:layout_below="@id/item_book_intro"
|
||||||
|
android:textColor="#4fa5d5"
|
||||||
|
android:background="@drawable/textview_border_blue"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_book_retention"
|
||||||
|
android:text="48.72%留存率"
|
||||||
|
android:textSize="10sp"
|
||||||
|
android:layout_toRightOf="@id/item_book_followers"
|
||||||
|
android:layout_below="@id/item_book_intro"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:textColor="#90F790"
|
||||||
|
android:background="@drawable/textview_border_green"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_marginTop="10sp"
|
||||||
|
android:layout_marginBottom="10sp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="15sp"
|
||||||
|
android:layout_height="15sp"
|
||||||
|
android:id="@+id/catalog_icon"
|
||||||
|
android:src="@mipmap/catalog_icon"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:layout_gravity="center_vertical"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/catalog_title"
|
||||||
|
android:text="正问卷 第1305章 一幅斑驳画卷贯穿古今"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:maxEms="12"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:textSize="15sp"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,42 @@
|
|||||||
|
<?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="50sp"
|
||||||
|
android:layout_margin="10sp">
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="150sp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:background="#FFFFFF">
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_category_name"
|
||||||
|
android:layout_margin="10sp"
|
||||||
|
android:text="玄幻"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textSize="15sp"
|
||||||
|
android:textColor="#2B2B2B" />
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/item_category_count"
|
||||||
|
android:layout_toRightOf="@+id/item_category_name"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_margin="5sp"
|
||||||
|
android:text="(17万本)"
|
||||||
|
android:textSize="13sp" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/textView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:text="TextView"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textColor="#A9A9A9"
|
||||||
|
android:textSize="16sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/textView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="52dp"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:text="TextView"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textSize="21sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
app:cardCornerRadius="20dp"
|
||||||
|
app:cardElevation="10dp"
|
||||||
|
android:layout_margin="10dp">
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="#EEEEEE">
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/ranking_item_image"
|
||||||
|
android:layout_width="50dp"
|
||||||
|
android:layout_height="70dp"
|
||||||
|
android:src="@mipmap/male_icon1"
|
||||||
|
android:layout_centerInParent="true"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/ranking_item_right"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="2"
|
||||||
|
android:background="#FFAEB9">
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/ranking_item_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="最热榜"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:textColor="#000000"
|
||||||
|
android:layout_centerInParent="true"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</android.support.v7.widget.CardView>
|
@ -0,0 +1,26 @@
|
|||||||
|
<?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="wrap_content">
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true">
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/footer_view_progessBar"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
style="?android:attr/progressBarStyleLargeInverse"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/footer_view_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:layout_marginStart="20dp"
|
||||||
|
android:text="数据加载中"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</RelativeLayout>
|
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@drawable/ic_launcher_background" />
|
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||||
|
</adaptive-icon>
|
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@drawable/ic_launcher_background" />
|
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||||
|
</adaptive-icon>
|
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 4.0 KiB |